Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 惰性属性getter的Swift等价物_Objective C_Swift_Properties - Fatal编程技术网

Objective c 惰性属性getter的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 -

以下表达式的Swift等价物是什么:

@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以来发生变化的行为,或者我只是做了一个错误的假设(我觉得我以前尝试过对懒惰变量进行变异,但失败了,但我找不到证据表明它曾经发生过变化)。不管怎样,我已经更新了答案。