我想对Swift中的一些属性使用Lazy初始化.
我当前的代码如下所示:
我当前的代码如下所示:
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而忘记属性的常量性质?
这是
Xcode 6.3 Beta / Swift 1.2 release notes的最新经文:
原文链接:https://www.f2er.com/swift/320174.htmllet constants have been generalized to no longer require immediate
initialization. The new rule is that a let constant must be
initialized before use (like a var),and that it may only be
initialized: not reassigned or mutated after initialization.This enables patterns like:
let x: SomeThing if condition { x = foo() } else { x = bar() } use(x)
which formerly required the use of a var,even though there is no
mutation taking place. (16181314)
很明显,你并不是唯一一个对此感到沮丧的人.