我是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 } }
第一个是通过闭包初始化的存储属性。第二个是计算属性。
存储的属性的初始化关闭被调用一次,只有一次,但你可以改变存储的属性值(除非您更换var同let)。当您希望封装代码以在单个简洁的代码块中初始化存储的属性时,此功能很有用。
var
let
但是,每次引用变量时都会调用计算属性的块。当您希望每次引用计算属性时都调用代码时,这很有用。通常,当每次引用存储的属性时都需要重新计算计算的属性时(例如,从其他可能是私有的存储属性重新计算),您可以执行此操作。
在这种情况下,您无疑需要存储的属性(第一个示例),而不是计算的属性(第二个示例)。您大概每次引用该变量时都不需要新的推送行为对象。
顺便说一下,在第一个示例中,您内部引用了它的实例化。如果您想要这种行为,则必须使用lazy关键字:
lazy
lazy var pushBehavior: UIPushBehavior = { let lazilyCreatedPush = UIPushBehavior() lazilyCreatedPush.setAngle(50, magnitude: 50) return lazilyCreatedPush }()
但是,如果属性为static,则将自动延迟实例化。
static