Objective c 惰性属性getter的Swift等价物
以下表达式的Swift等价物是什么:Objective c 惰性属性getter的Swift等价物,objective-c,swift,properties,Objective C,Swift,Properties,以下表达式的Swift等价物是什么: @property (strong, nonatomic) UIView *topView; - (UIView *)topView { ... } 是否有以下情况: var topView: UIView { get { ... } } 如果前者是真的,有没有一种方法可以定义外部getter?我想你要问的是如何实现类似于以下内容的东西: @property (nonatomic, strong) UIView *topView -
@property (strong, nonatomic) UIView *topView;
- (UIView *)topView {
...
}
是否有以下情况:
var topView: UIView {
get {
...
}
}
如果前者是真的,有没有一种方法可以定义外部getter?我想你要问的是如何实现类似于以下内容的东西:
@property (nonatomic, strong) UIView *topView
- (UIView *)topView {
if (_topView == nil) {
_topView = //...
// configure _topView...
}
return _topView;
}
此惰性属性getter在Swift中很容易实现:
lazy var topView: UIView = {
let view = //...
// configure view...
return view
}()
这将导致只读变量,该变量仅在首次访问时初始化。您发布的Swift代码是一个计算只读属性,每次访问它时都会对其进行评估。
计算属性
?@PeterM您的意思是什么?也许这会有所帮助:()根据您问题的标题,我会回答,Swift等价于属性getter
是一个计算属性
()。现在可能是我不理解你的实际问题。即使在你发布的懒惰示例中,我也需要一个helper变量,对吗?或者我可以直接设置topView吗?@confile否,懒惰示例是自包含的。topView
变量用“=
”后面的闭包返回值初始化。如果可以在一行上完成初始化,则不需要闭包,例如:lazy var topView=UIView(frame:CGRect.zeroRect)
。我强烈建议阅读。答案提到“这将导致只读变量在首次访问时初始化一次,之后无法更改”。据我所知,一个lazy
变量可以在实例化后重新赋值。@sabajt你说得对,谢谢。我不确定这是否是自Swift 1.0以来发生变化的行为,或者我只是做了一个错误的假设(我觉得我以前尝试过对懒惰变量进行变异,但失败了,但我找不到证据表明它曾经发生过变化)。不管怎样,我已经更新了答案。