【发布时间】:2014-11-27 10:12:02
【问题描述】:
在 Objective-C 中,通过惰性初始化,我可以将任何 @property 设置为 nil,当我调用它的 getter 时,它将被重新创建。
但是,在 Swift 中,使用 lazy 修饰符,它不起作用。
使用此代码对其进行了测试:
class SomeClass {
lazy var optionalVar: String? = {
return "abc"
}()
func checkVar() {
println(optionalVar!)
}
}
let instance = SomeClass()
instance.checkVar()
//instance.variable = nil
instance.checkVar()
当variable设置为nil时,不会重新初始化。因此,下一行代码触发运行时错误。
如何让我的 Swift 代码像在 Objective-C 中一样工作?
谢谢。
----------------
编辑:添加更多代码
class SomeClass {
var optionalVar: String?
func checkVar() {
println(optionalVar!)
}
func createVar() -> String {
if let tempVar = optionalVar {
return tempVar
} else {
println("create optional")
return "123"
}
}
}
let instance = SomeClass()
instance.optionalVar = instance.createVar()
instance.checkVar()
instance.optionalVar = nil
instance.optionalVar = instance.createVar()
instance.checkVar()
【问题讨论】:
-
是的,我确实读过这个问题,以及其他几个相同主题的问题。基本上,这些问题的答案都是模仿 Objective-C 解决方案。我正在寻找更优雅的解决方案。
-
不幸的是,懒惰是为了一次性初始化。使用我的代码在链接问题中的
Lazy类怎么样? -
这是一个很好的解决方案,真的。但是,我想先熟悉语言,所以我会使用传统的方式。我正在考虑为每个
var创建许多methods。然后,我不会将它们设置为nil,而是调用 var 的“init 方法”,你怎么看?这样好吗? -
你能举个例子吗?