在使用Swift玩一点时,我尝试编写一个readonly和lazy初始化属性.我很快就编写了这行代码,以了解它是不允许的.
// no valid Swift code.
lazy let foo : Int = { return 42 }()
Run Code Online (Sandbox Code Playgroud)
您必须将延迟属性声明为var.这本快速的书明确指出,懒惰是不可能有充分理由:
"您必须始终将惰性属性声明为变量(使用var关键字),因为在实例初始化完成之后,可能无法检索其初始值.在初始化完成之前,常量属性必须始终具有值,因此不能声明为惰性."
假设我想在swift中拥有一个readonly lazy属性.什么是存档的最佳方式?
Ant*_*nio 41
如果readonly和private在这种特定情况下是您的同义词,那么您可以通过显式声明它来使setter变为私有:
private(set) lazy var foo : Int = { return 42 }()
Run Code Online (Sandbox Code Playgroud)
这是不变性和懒惰之间的良好折衷.
您还可以使用懒惰初始化的私有后备变量:
var foo : Int { return _foo }
private lazy var _foo :Int = { return 42 }()
Run Code Online (Sandbox Code Playgroud)
可以使用计算属性和私有结构来做到这一点。static var 值不需要使用lazy 关键字,因为将块的结果分配给它是隐式惰性的。
var foo: Int {
struct Holder {
static var value = { return 42 }()
}
return Holder.value
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7555 次 |
| 最近记录: |