Swift 计算机属性的使用

Swift 计算机属性的使用,swift,properties,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:

以前

之后

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)
    }
}
它是一个带有默认值的存储的属性

它使用
self
,这会导致错误,因为在将要分配默认值的时刻,不保证实例化实例

计算属性(仅在调用时计算)的替代方法是延迟实例化属性

class DrawingView: UIView {

    var arcCenter: CGPoint {
        return CGPoint(x: frame.midX, y: frame.midY)
    }
}

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

无需使用闭包<代码>中心:CGPoint=CGPoint(x:self.frame.midX,y:self.frame.midY)