Swift中的惰性属性等同于Objective C中的惰性Init getter

在Swift中的惰性属性是否等同于在Objective C中用延迟加载模式覆盖getter?

从文档:

惰性存储属性是一个属性,其初始值在第一次使用前不计算。 通过在声明之前编写lazy属性来指示一个懒惰的存储属性。

所以,大部分是的。

您必须始终将lazy属性声明为variables(使用var关键字),因为在实例初始化完成之前,可能不会检索其初始值。 在初始化完成之前,常量属性必须始终有一个值,因此不能被声明为惰性。“

请记住,在Swift中,您可以select为属性声明自定义getter和setter:

var name : String?{ get{ return "Oscar" } set(newValue){ } } 

参考这个:

 lazy var x = SomeFunction() 

在Objective-C中最接近的相当于:

 @property BOOL xHasBeenSet; @property id x; - (id)x { if (!self.xHasBeenSet) { self.x = SomeFunction(); } return x; } - (void)setX:(id)x { _x = x; self.xHasBeenSet = YES; } 

在这里,只有在第一次读取x时才会看到SomeFunction ,但是只有在不先设置x 。 需要注意的是,右侧只有一个代码path被调用,并且不会重置为xHasBeenSet = NO

主要是 – 它不能是一个计算属性