Swift 方括号包裹数组之后的闭包是做什么的
Swift what does the closure immediately after squared bracket wrapped array do
我正在学习Apple IOS dev 的官方教程。遇到这个小块,想不通。
Landmark
是数据模型
@Published var landmarks: [Landmark]
var features: [Landmark]{
landmarks.filter{[=11=].isFeatured}
}
显然 features
是一个以 Landmark
类型作为其成员的数组。 landmarks.filter{[=16=].isFeatured}
只是试图过滤掉那些 属性 isFeatured
为 true
.
的 Landmark
但是我检查了Swift中数组的初始化,你看到的就像你使用var features = landmarks.filter([=20=].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{[=12=].isYes}
}
print(myArray2)
//var myArray3: [MyStruct] = myArray.filter([=12=].isYes)
//
//print(myArray3)
//var myArray4: [MyStruct] = {myArray.filter([=12=].isYes)}
//
//print(myArray4)
//var myArray5<MyStruct> = {myArray.filter([=12=].isYes)}
//
//print(myArray5)
var arrayB = myArray.filter{[=12=].isYes}
print(arrayB)
该代码中没有“初始化”。您正在查看计算变量 (属性)。
features
实际上是一个 函数 ,returns 是一个值(省略了单词 return
,因为它是一个衬垫);每次你说 features
.
时它都会重新运行
这个可以写成
func features() -> [Landmark] {
landmarks.filter{[=10=].isFeatured}
}
但人们感觉将其表达为一种 属性 比作为一种方法更好。
这里有一个更简单的例子,可以在操场上玩:
struct Greeter {
var greeting : String { "howdy" }
func greet() -> String { "howdy" }
}
let greeter = Greeter()
print(greeter.greeting)
print(greeter.greet())
我正在学习Apple IOS dev 的官方教程。遇到这个小块,想不通。
Landmark
是数据模型
@Published var landmarks: [Landmark]
var features: [Landmark]{
landmarks.filter{[=11=].isFeatured}
}
显然 features
是一个以 Landmark
类型作为其成员的数组。 landmarks.filter{[=16=].isFeatured}
只是试图过滤掉那些 属性 isFeatured
为 true
.
Landmark
但是我检查了Swift中数组的初始化,你看到的就像你使用var features = landmarks.filter([=20=].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{[=12=].isYes}
}
print(myArray2)
//var myArray3: [MyStruct] = myArray.filter([=12=].isYes)
//
//print(myArray3)
//var myArray4: [MyStruct] = {myArray.filter([=12=].isYes)}
//
//print(myArray4)
//var myArray5<MyStruct> = {myArray.filter([=12=].isYes)}
//
//print(myArray5)
var arrayB = myArray.filter{[=12=].isYes}
print(arrayB)
该代码中没有“初始化”。您正在查看计算变量 (属性)。
features
实际上是一个 函数 ,returns 是一个值(省略了单词 return
,因为它是一个衬垫);每次你说 features
.
这个可以写成
func features() -> [Landmark] {
landmarks.filter{[=10=].isFeatured}
}
但人们感觉将其表达为一种 属性 比作为一种方法更好。
这里有一个更简单的例子,可以在操场上玩:
struct Greeter {
var greeting : String { "howdy" }
func greet() -> String { "howdy" }
}
let greeter = Greeter()
print(greeter.greeting)
print(greeter.greet())