gpt4 book ai didi

iphone - App Delegate 中的 Core Data 堆栈变量中的 Swift 语法不明确

转载 作者:行者123 更新时间:2023-11-30 10:12:01 25 4
gpt4 key购买 nike

对于来自 AppDelegate 的这段代码:

lazy var managedObjectModel: NSManagedObjectModel = {
// The managed object model for the application. This property is not optional. It is a fatal error for the application not to be able to find and load its model.
let modelURL = NSBundle.mainBundle().URLForResource("Test102", withExtension: "momd")!
return NSManagedObjectModel(contentsOfURL: modelURL)!
}()

1) 等号后面的语法是什么:var x : Type? = {statements}() 我知道闭包的语法是 ({args->returnType in statements}){statements}( ){statements} 如果闭包是函数中的最后一个参数

2) 有时,我发现选项的用法不明确,为什么要对返回的对象使用强制展开运算符 (!)?为什么我们不直接使用 return NSManagedObjectModel(contentsOfURL: modelURL) 呢?为什么在某些情况下要使用带有 (!) 的向下转型关键字 as 而不是通常的运算符 (?)? as! 是指强制展开的向下转换还是隐式展开的可选向下转换

附:不要告诉我阅读 Swift 中的可选章节或阅读 Swift 书籍,因为我已经这样做了。

最佳答案

1) 语法实际上是一个函数/闭包,称为延迟存储属性。它的工作方式类似于单例,并且在第一次访问该属性时初始化(一次)。

来自文档:

A lazy stored property is a property whose initial value is not calculated until the first time it is used. You indicate a lazy stored property by writing the lazy modifier before its declaration.

2) 如果您知道表达式的结果为 never nil 并且结果类型为 always,则指定类型使用强制展开的向下转型运算符 as! 否则,请使用带有 as? 运算符的可选绑定(bind)来检查 nil 和类型

关于iphone - App Delegate 中的 Core Data 堆栈变量中的 Swift 语法不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32457543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com