想知道使用计算属性

时间:2017-03-28 10:07:49

标签: swift properties

之前。

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)
    }
}

我知道为什么会出现这种错误,但我无法理解为什么第二个代码没有错误。

1 个答案:

答案 0 :(得分:0)

第一种形式是计算属性。

这是存储的属性,具有默认值。

它使用self导致错误,因为此时将分配默认值,不保证实例化实例。

计算属性的替代方法 - 仅在被调用时计算 - 是一个惰性实例化属性。

lazy var arcCenter: CGPoint = CGPoint(x: self.frame.midX, y: self.frame.midY)

存储的属性不同,第一次访问该属性时会分配默认值。