계산된 속성과 폐쇄로 설정된 속성의 차이
스위프트는 처음입니다.계산된 속성과 폐쇄로 설정된 속성의 차이점은 무엇입니까?계산된 속성은 매번 다시 계산된다는 것을 알고 있습니다.폐쇄하는 것과 다른가요?
닫힘:
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
}
}
즉, 첫 번째는 폐쇄를 통해 초기화되는 저장된 속성이며, 초기화 시 해당 폐쇄가 한 번만 호출됩니다.두번째는 계산된 속성으로,get
블록은 해당 속성을 참조할 때마다 호출됩니다.
저장된 속성의 초기화 닫기는 한 번만 호출되지만 나중에 변경하지 않는 한 저장된 속성의 값을 변경할 수 있습니다.var
와 함께let
코드를 캡슐화하여 저장된 속성을 간결한 단일 코드 블록에 초기화하려는 경우에 유용합니다.
그러나 계산된 속성의 블록은 변수를 참조할 때마다 호출됩니다.계산된 속성을 참조할 때마다 코드를 호출하고 싶을 때 유용합니다.일반적으로 저장된 속성을 참조할 때마다 계산된 속성을 다시 계산해야 하는 경우(예: 저장된 다른 속성에서 다시 계산된 경우) 이 작업을 수행합니다.
이 경우 계산된 속성(두 번째 예제)이 아니라 저장된 속성(첫 번째 예제)을 원할 수 있습니다.변수를 참조할 때마다 새로운 푸시 동작 개체를 원하지 않을 수 있습니다.
그건 그렇고, 첫번째 예에서, 당신은 내부적으로 그것이 게으르게 인스턴스화되는 것을 언급합니다.만약 당신이 그 행동을 원한다면, 당신은 다음을 사용해야 합니다.lazy
키워드:
lazy var pushBehavior: UIPushBehavior = {
let behavior = UIPushBehavior()
behavior.setAngle(50, magnitude: 50)
return behavior
}()
그러나 만약 그 부동산이static
, 그것은 자동적으로 게으르게 인스턴스화됩니다.
닫힘:
//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 variable의 "let" 키워드로 variable을 선언할 수 없습니다.
따라서 당신의 요구에 따라 이 코드를 사용할 수 있습니다.
가장 큰 차이점은 세터가 없기 때문에 계산된 속성에 무언가를 할당할 수 없다는 것입니다.이 경우 클로저는 한 번만 호출되고 반환 값은 변수에 저장되므로 시간이 지나도 결과가 변하지 않으면 계산된 변수보다 저장된 변수를 사용하는 것이 더 효율적입니다.
일반적으로 계산된 속성은 값을 빠르게 검색할 수 있는 경우에만 사용해야 합니다.
사이드노트 : 저장된 를 변경하지 않을 저장된 재할당하지 변경 / 않을 경우 상수 변수를 ( 상수 경우 않을 making 재할당하지 변수를 저장된 it 사이드노트 ( )let
)
이것은 답이 아니지만 다음과 같은 이유로 언급할 가치가 있습니다.
- 초기화가 완료된 후 저장된 속성의 값을 알아야 합니다.이는 기본값을 사용하거나 초기화를 통해 이루어집니다.
- 계산된 속성의 값은 액세스할 때까지 계산되지 않습니다.
- 게으르게 로드된 속성의 값은 액세스하기 전에는 정의되지 않습니다.
Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ,self
또는 저장된 속성을 걱정 없이 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/31515805/difference-between-computed-property-and-property-set-with-closure
'bestsource' 카테고리의 다른 글
드롭다운 메뉴를 기반으로 여러 개의 텍스트 표시 (0) | 2023.09.06 |
---|---|
CMD를 사용하여 SQL 데이터베이스 가져오기 - 고유 액세스 거부 오류 (0) | 2023.09.06 |
숫자(0-9)와 NO 문자만 사용할 수 있는 정규식 (0) | 2023.09.06 |
스프링 MVC - 스프링 보안을 통해 사용자가 이미 로그인되어 있는지 확인? (0) | 2023.09.06 |
Mysql2:: 오류: 잠금을 시도할 때 교착 상태가 발견되었습니다. 트랜잭션을 다시 시작해 보십시오(Ruby on Rails). (0) | 2023.09.06 |