2017-03-28 3 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) 
    } 
} 

왜 그런 오류가 발생하는지 알지만 두 번째 코드가 오류를 내지 않는 이유를 알 수 없습니다.

답변

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