计算属性和带闭包的属性集之间的区别

我是Swift的新手。计算属性和设置为闭包的属性之间有什么区别?我知道每次都会重新计算一个计算属性。封盖是否有所不同?即

var pushBehavior: UIPushBehavior = {

let lazilyCreatedPush = UIPushBehavior()

lazilyCreatedPush.setAngle(50, magnitude: 50)

return lazilyCreatedPush

}()

var pushBehavior: UIPushBehavior {

get{

let lazilyCreatedPush = UIPushBehavior()

lazilyCreatedPush.setAngle(50, magnitude: 50)

return lazilyCreatedPush

}

}

回答:

第一个是通过闭包初始化的存储属性。第二个是计算属性。

存储的属性的初始化关闭被调用一次,只有一次,但你可以改变存储的属性值(除非您更换varlet)。当您希望封装代码以在单个简洁的代码块中初始化存储的属性时,此功能很有用。

但是,每次引用变量时都会调用计算属性的块。当您希望每次引用计算属性时都调用代码时,这很有用。通常,当每次引用存储的属性时都需要重新计算计算的属性时(例如,从其他可能是私有的存储属性重新计算),您可以执行此操作。

在这种情况下,您无疑需要存储的属性(第一个示例),而不是计算的属性(第二个示例)。您大概每次引用该变量时都不需要新的推送行为对象。


顺便说一下,在第一个示例中,您内部引用了它的实例化。如果您想要这种行为,则必须使用lazy关键字:

lazy var pushBehavior: UIPushBehavior = {

let lazilyCreatedPush = UIPushBehavior()

lazilyCreatedPush.setAngle(50, magnitude: 50)

return lazilyCreatedPush

}()

但是,如果属性为static,则将自动延迟实例化。

以上是 计算属性和带闭包的属性集之间的区别 的全部内容, 来源链接: utcz.com/qa/406803.html

回到顶部