2017-03-28 18 views
-1

を使用するのが不思議です。計算されたプロパティ

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

私はなぜそのエラーが発生するのか知っていますが、なぜ2番目のコードがエラーにならないのか理解できません。

答えて

0

最初のフォームはではなく、の計算されたプロパティです。

プロパティがデフォルト値で格納されているです。

selfを使用すると、デフォルト値が割り当てられる瞬間にインスタンスがインスタンス化されることが保証されていないため、エラーが発生します。

計算されたプロパティの代わりにと計算されたは、怠惰なインスタンス化プロパティです。プロパティが最初にアクセスされたときにデフォルト値が割り当てられ格納さ性異なり

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

+0

クロージャを使用する必要はありません。 'lazy var arcCenter:CGPoint = CGPoint(x:self.frame.midX、y:self.frame.midY)' –

+1

@LeoDabusありがとう、ありがとう。 – vadian

関連する問題