Swift相当于lazy Property getter

con*_*ile 0 properties objective-c swift

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

@property (strong, nonatomic) UIView *topView;

- (UIView *)topView {
...
}
Run Code Online (Sandbox Code Playgroud)

是以下内容:

var topView: UIView {
  get {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

如果前者是真的,有没有办法定义外部吸气剂?

Stu*_*art 8

你要问的是如何实现类似于以下内容:

@property (nonatomic, strong) UIView *topView

- (UIView *)topView {
    if (_topView == nil) {
        _topView = //...
        // configure _topView...
    }
    return _topView;
}
Run Code Online (Sandbox Code Playgroud)

这个懒惰的属性getter很容易在Swift中实现:

lazy var topView: UIView = {
    let view = //...
    // configure view...
    return view
}()
Run Code Online (Sandbox Code Playgroud)

这会生成只读变量,该变量仅在首次访问时初始化.您发布的Swift代码是一个计算的只读属性,每次访问时都会对其进行评估.

  • 答案提到"这导致只读变量在首次访问时初始化一次,之后无法更改".据我所知,实例化后可以重新分配`lazy`变量_can_. (3认同)
  • @confile不,这个懒惰的例子是自包含的.`topView`变量初始化为'=`'后面的闭包的返回值.如果初始化可以在一行上完成,则不需要闭包,例如:`lazy var topView = UIView(frame:CGRect.zeroRect)`.我强烈建议您阅读The Swift Programming Language的['Properties'一章](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html). (2认同)