之前。
class DrawingView: UIView {
var arcCenter = CGPoint(x: frame.midX, y: frame.midY) // error
}
后。
class DrawingView: UIView {
var arcCenter: CGPoint {
return CGPoint(x: frame.midX, y: frame.midY)
}
}
我知道为什么会出现这种错误,但我无法理解为什么第二个代码没有错误。
答案 0 :(得分:0)
第一种形式是不计算属性。
这是存储的属性,具有默认值。
它使用self
导致错误,因为此时将分配默认值,不保证实例化实例。
计算属性的替代方法 - 仅在被调用时计算 - 是一个惰性实例化属性。
lazy var arcCenter: CGPoint = CGPoint(x: self.frame.midX, y: self.frame.midY)
与存储的属性不同,第一次访问该属性时会分配默认值。