계산 된 속성과 클로저로 설정된 속성의 차이점
저는 Swift를 처음 사용합니다. 계산 된 속성과 클로저로 설정된 속성의 차이점은 무엇입니까? 계산 된 속성이 매번 다시 계산된다는 것을 알고 있습니다. 폐쇄는 다른가요? 즉
폐쇄:
var pushBehavior: UIPushBehavior = {
let lazilyCreatedPush = UIPushBehavior()
lazilyCreatedPush.setAngle(50, magnitude: 50)
return lazilyCreatedPush
}()
계산 됨 :
var pushBehavior: UIPushBehavior {
get{
let lazilyCreatedPush = UIPushBehavior()
lazilyCreatedPush.setAngle(50, magnitude: 50)
return lazilyCreatedPush
}
}
첫 번째는 클로저를 통해 초기화되는 저장된 속성입니다. 두 번째는 계산 된 속성입니다.
저장된 숙박 시설의 초기 폐쇄 한 번만 호출되지만 나중에 저장된 속성 값을 (당신은 대체하지 않는 한 변경할 수 있습니다 var
와 함께 let
). 이것은 코드를 캡슐화하여 하나의 간결한 코드 블록으로 저장된 속성을 초기화하려는 경우에 유용합니다.
그러나 계산 된 속성의 블록은 변수를 참조 할 때마다 호출됩니다. 계산 된 속성을 참조 할 때마다 코드를 호출하려는 경우에 유용합니다. 일반적으로 저장된 속성을 참조 할 때마다 계산 된 속성을 다시 계산해야 할 때이 작업을 수행합니다 (예 : 저장된 다른 개인용 속성에서 다시 계산 됨).
이 경우 의심 할 여지없이 계산 된 속성 (두 번째 예제)이 아닌 저장된 속성 (첫 번째 예제)이 필요합니다. 아마도 변수를 참조 할 때마다 새로운 푸시 동작 객체를 원하지 않을 것입니다.
그건 그렇고, 첫 번째 예에서 내부적으로 느리게 인스턴스화되는 것을 참조합니다. 이러한 동작을 원하면 다음 lazy
키워드 를 사용해야합니다 .
lazy var pushBehavior: UIPushBehavior = {
let lazilyCreatedPush = UIPushBehavior()
lazilyCreatedPush.setAngle(50, magnitude: 50)
return lazilyCreatedPush
}()
그러나 속성이 static
인 경우 자동으로 느리게 인스턴스화됩니다.
가장 큰 차이점은 setter가 없기 때문에 계산 된 속성에 무언가를 할당 할 수 없다는 것입니다. 이 경우 클로저는 한 번만 호출되고 반환 값은 변수에 저장되므로 시간이 지남에 따라 결과가 변경되지 않으면 계산 된 변수보다 저장된 변수를 사용하는 것이 더 효율적입니다.
일반적으로 계산 된 속성은 값을 빠르게 검색 할 수있는 경우에만 사용해야합니다.
참고 : 저장된 변수를 변경 / 재할 당하지 않는 경우 상수로 만드는 것을 고려해야합니다 ( let
).
폐쇄 :
//closure
var pushBehavior: UIPushBehavior = {
let lazilyCreatedPush = UIPushBehavior()
lazilyCreatedPush.setAngle(50, magnitude: 50)
return lazilyCreatedPush
}()
pushBehavior 변수가 처음 호출되면 블록이 실행되고 값은 pushBehavior 변수에 저장됩니다. 그 후 pushBehavior를 호출 할 때마다 해당 값이 반환됩니다.
이 변수에 처음 실행되고 저장되는 블록 코드 만 의미합니다. 또한 원할 때마다 변수 값을 저장할 수 있지만 그 이후에는 해당 값이 반환되지만 "let"으로 선언하면이 값을 변경할 수 없습니다.
계산 된 속성 :
var pushBehavior: UIPushBehavior {
get{
let lazilyCreatedPush = UIPushBehavior()
lazilyCreatedPush.setAngle(50, magnitude: 50)
return lazilyCreatedPush
}
}
계산 된 속성에서 pushBehavior 변수를 호출 할 때마다이 블록이 실행되고 값이 반환됩니다. 그래서 매번 블록이 실행됩니다. 그리고 pushBehavior 변수에 대한 "let"키워드로 변수를 선언 할 수 없습니다.
따라서 요구 사항에 따라이 코드를 사용할 수 있습니다.
이것은 대답이 아니지만 다음과 같은 경우에 대해 언급 할 가치가 있습니다.
- 초기화 후 값을 알아야하는 저장된 속성 입니다. 이는 기본값으로 또는 초기화를 통해 발생합니다.
- 계산 된 속성의 값은 액세스 될 때까지 계산되지 않습니다.
- A lazy loaded property's value isn't defined until it's accessed
hence for both computed and lazy variables you can access self
or stored properties with no worries.
ReferenceURL : https://stackoverflow.com/questions/31515805/difference-between-computed-property-and-property-set-with-closure
'IT TIP' 카테고리의 다른 글
AttributeError : Python에서 속성을 설정할 수 없습니다. (0) | 2020.12.15 |
---|---|
Karma 실행 단일 테스트 (0) | 2020.12.15 |
열려있는 모든 문서 탭을 표시합니다. (0) | 2020.12.15 |
VSCode의 열에서 자동으로 줄 바꿈 (0) | 2020.12.15 |
WPF 레이블 가속기 키 비활성화 (텍스트 밑줄이 없음) (0) | 2020.12.15 |