bestsource

계산된 속성과 폐쇄로 설정된 속성의 차이

bestsource 2023. 9. 6. 22:11
반응형

계산된 속성과 폐쇄로 설정된 속성의 차이

스위프트는 처음입니다.계산된 속성과 폐쇄로 설정된 속성의 차이점은 무엇입니까?계산된 속성은 매번 다시 계산된다는 것을 알고 있습니다.폐쇄하는 것과 다른가요?

닫힘:

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

반응형