我想在Swift中为我的一些属性使用Lazy初始化。 我当前的代码如下所示:Lazy Var vs Let
lazy var fontSize : CGFloat = {
if (someCase) {
return CGFloat(30)
} else {
return CGFloat(17)
}
}()
的事情是,一旦fontSize的设置它永远不会改变。 所以我想这样做:
lazy let fontSize : CGFloat = {
if (someCase) {
return CGFloat(30)
} else {
return CGFloat(17)
}
}()
这是不可能的。
只有这样工作的:
let fontSize : CGFloat = {
if (someCase) {
return CGFloat(30)
} else {
return CGFloat(17)
}
}()
所以 - 我想,这将是延迟加载,但永远不会改变的属性。 这样做的正确方法是什么?使用let
忘记了懒惰的init?或者我应该使用lazy var
,并忘记财产的不变性质?
我同意 - Swift需要懒惰让。懒惰var模式的另一个问题(当值肯定不会改变时)是,第一次简单读取属性会计算对象的变异(在内部它会进行变异 - 将延迟值存储),但这意味着外部代码必须将对象声明为var,即使从外部代码的角度来看,对象也不会改变。 –
你可以得到的唯一'懒惰'是'var'(从Swift 2.1开始),如果它只是一个浮动任务,我不会担心懒惰,特别是如果你绝对知道它将被访问 – bshirley