arrays - Swift在方括号包装数组之后立即关闭做什么
问题描述
我正在关注 Apple 的 IOS dev 官方教程。我遇到了这个小块,无法绕开它。
Landmark
是数据模型
@Published var landmarks: [Landmark]
var features: [Landmark]{
landmarks.filter{$0.isFeatured}
}
显然是一个以类型为成员features
的数组。Landmark
这landmarks.filter{$0.isFeatured}
只是试图过滤掉那些Landmark
具有其属性isFeatured
的s 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)
解决方案
该代码中没有“初始化”。您正在查看计算变量(属性)。
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())
推荐阅读
- javascript - 如何对数组内的对象进行分组
- email - 由于逗号,后缀发件人姓名部分缺失
- apache - nginx 服务器的 http_response_code 等效项是什么?
- python - 如何绘制具有不同 sin 函数值的方程?
- django - Django3:无法在 Django 中链接 html 页面
- javascript - 将嵌入发送到 discord.js 中的频道不起作用
- macos - 在电子上公证 macOS 应用程序失败,因为 - 未签名 - 我应该签署什么?
- c# - 使用 C#8.0 在 Visual Studio 中优化 switch case 后出现意外结果
- flutter - 如何解决错误:沙箱与 Podfile.lock 不同步
- c# - 使用匿名函数更改“正常”代码的可能副作用