提问人:Jason 提问时间:5/9/2021 更新时间:5/9/2021 访问量:160
Swift 方括号括号后立即的闭包有什么作用 [复制]
Swift what does the closure immediately after squared bracket wrapped array do [duplicate]
问:
我正在遵循Apple的IOS开发官方教程。我遇到了这个小块,无法将我的头缠绕在它周围。
Landmark
是数据模型
@Published var landmarks: [Landmark]
var features: [Landmark]{
landmarks.filter{$0.isFeatured}
}
显然是一个以 type 作为其成员的数组。只是试图过滤掉那些具有其属性的 s。features
Landmark
landmarks.filter{$0.isFeatured}
Landmark
isFeatured
true
但是我已经检查了 Swift 中数组的初始化,您看到的数组与您使用的数组一样。你几乎看不到任何例子var features = landmarks.filter($0.isFeatured)
[ something ] { something }
示例代码是用闭包初始化数组的正确方法吗?
对于那些有兴趣尝试自己的人,您可以在 Playground 中尝试以下玩具代码:
struct MyStruct: Codable {
var isYes: Bool
var name: String
}
let myArray = [
MyStruct(isYes: true, name: "A"),
MyStruct(isYes: true, name: "B"),
MyStruct(isYes: false, name: "C"),
]
print("hello")
print(myArray)
var myArray2: [MyStruct]{
myArray.filter{$0.isYes}
}
print(myArray2)
//var myArray3: [MyStruct] = myArray.filter($0.isYes)
//
//print(myArray3)
//var myArray4: [MyStruct] = {myArray.filter($0.isYes)}
//
//print(myArray4)
//var myArray5<MyStruct> = {myArray.filter($0.isYes)}
//
//print(myArray5)
var arrayB = myArray.filter{$0.isYes}
print(arrayB)
答:
3赞
matt
5/9/2021
#1
该代码中没有“初始化”。您正在查看一个计算变量(属性)。
features
实际上,是一个返回值的函数(省略了单词,因为它是单行);每次你说 .return
features
这本来可以写成
func features() -> [Landmark] {
landmarks.filter{$0.isFeatured}
}
但人们有一种感觉,这最好表达为一种属性,而不是一种方法。
这里有一个在操场上玩的更简单的案例:
struct Greeter {
var greeting : String { "howdy" }
func greet() -> String { "howdy" }
}
let greeter = Greeter()
print(greeter.greeting)
print(greeter.greet())
评论
2赞
aheze
5/9/2021
计算属性权?
0赞
Jason
5/9/2021
非常感谢,这很清楚。因此,我可以将其总结为:使属性既动态又简略,以便无论何时调用,它都会根据用户输入获取最新的值。features
0赞
matt
5/9/2021
我会用我说的方式说。它根本不是“真正”的财产;它是使用属性语法调用的函数。
评论
get
get
set
get {}