Swift 方括号括号后立即的闭包有什么作用 [复制]

Swift what does the closure immediately after squared bracket wrapped array do [duplicate]

提问人:Jason 提问时间:5/9/2021 更新时间:5/9/2021 访问量:160

问:

我正在遵循Apple的IOS开发官方教程。我遇到了这个小块,无法将我的头缠绕在它周围。

Landmark是数据模型

@Published var landmarks: [Landmark]

var features: [Landmark]{
        landmarks.filter{$0.isFeatured}
    }

显然是一个以 type 作为其成员的数组。只是试图过滤掉那些具有其属性的 s。featuresLandmarklandmarks.filter{$0.isFeatured}LandmarkisFeaturedtrue

但是我已经检查了 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)
数组 SWIFT 初始 化闭包

评论

1赞 aheze 5/9/2021
这是 - 检查这个get
1赞 aheze 5/9/2021
如果你只有 和 没有 ,你可以去掉内部语法getsetget {}

答:

3赞 matt 5/9/2021 #1

该代码中没有“初始化”。您正在查看一个计算变量(属性)。

features实际上,是一个返回值的函数(省略了单词,因为它是单行);每次你说 .returnfeatures

本来可以写成

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
我会用我说的方式说。它根本不是“真正”的财产;它是使用属性语法调用的函数。