2016-08-16 1 views
0

다음 개념을 올바르게 이해했는지 명확히하고자합니다.계산 된 속성의 장점 (gettable 만 해당) 대 저장된 속성

내 목표는 var sayGoodMorningToUser 변수에 String 을 저장하는 것이라고 가정합니다.

var sayGoodMorningToUserStored = greeting + username 

:

문자열은 내가 저장된 속성 대 계산 된 속성을 사용하는 경우는 즉, 무슨 상관입니까? 즉

var greeting = "Good morning, " 
var username = "Mike" 

두 개의 변수로 구성되어 있습니다

var sayGoodMorningToUserComputed:String { 
    return greeting + username 
} 

내가이 두 가지 접근법 사이에서 보는 유일한 차이점은 누구나 변경할 수 있다는 것입니다. sayGoodMorningToUserStored의 값은 쉽고 직접 저장됩니다 (예 : 사람들이 대신 단순히 변수를 계산하는 이유

var sayGoodMorningToUserComputed = "Hallo" //this would cause an error 

그렇지 않으면 나는 이해할 수 없다 : 단순히 새로운 문자열 값으로 설정할 수 없기 때문에, sayGoodMorningToUserComputed 직접 수정할 수 없습니다 변수 반면

var sayGoodMorningToUserStored = "myNewChangedValue" 

를 작성하여 쓰기

var sayGoodMorningToUserStored = greeting + username. 

내가 제대로 이해한다면 누구나 설명 할 수 있습니까? 또는 계산 된 변수와 저장된 값의 장점이 있습니까?

여기에서 설정 가능한 변수를 논의하는 것이 범위를 벗어날 수 있으므로 내 질문에 gettable 변수 만 제한하고 싶습니다.

+0

계산 된 속성의 목적은 한 번 선언하고 '사용자 이름'이 변경되면 계산 된 "인사말"속성이이를 반영하도록 자동으로 업데이트됩니다. 그래서'username'이 변경되면,'sayGoodMorningToUserStored' 업데이트를 기억할 필요가 없습니다. 코드의 다른 부분을 참조하면'sayGoodMorningToUserStored'가 처음 선언되었을 때의'username'보다는'username'의 현재 값을 자동으로 반영합니다. – Rob

+0

내가 생각할 수있는 가장 큰 차이점은 프로토콜 및 프로토콜 확장입니다. 프로토콜을 사용하면 상태를 유지할 수 없으므로 계산 된 값이 가장 좋습니다. – jonmecer

+0

@ 피산 당신의 질문이 만족 스럽다면 받아 들일만한 질문을 적어주세요. – Alexander

답변

1

계산 된 속성

var sayGoodMorningToUserComputed: String { 
    return greeting + username 
} 

sayGoodMorningToUserComputed 역할을합니다. greeting 또는 username으로 변경 한 경우 sayGoodMorningToUserComputed은 현재 값의 연결이 될 최신 결과를 반환합니다.

반환 값이 종속성의 최신 값 (greetingusername)에서 계산되도록하려면이 옵션을 사용하는 것이 좋습니다. 이 종속성이

저장 속성을 변경할 수 없습니다 알고 있기 때문에 모두 의존성이 final입니다 경우

은, 그것은, 컴파일러가 저장 특성으로이 계산 된 특성을 최적화하는 것이 매우 가능성이 높습니다

var sayGoodMorningToUserStored = greeting + username 

sayGoodMorningToUserStored은 변수 일 뿐이며 특별한 일은 없습니다. 그러나 포함 된 범위가 초기화 될 때마다 한 번만 설정됩니다. 한 번 계산되어 저장되고 외부 소스가 덮어 쓸 때까지 상수로 유지됩니다. 따라서 greeting 또는 username이 변경되면 sayGoodMorningToUserStored에 영향을 미치지 않습니다. 이전 값에서 계산되어 저장 되었기 때문입니다.

종속성이 일정한 계산 결과를 캐싱하여 성능을 향상 시키려면이 옵션을 사용하는 것이 좋습니다.

+0

이 남자에게 지긋한 확인 표시를하십시오. – ospahiu

2

귀하의 예제의 차이는 이것이다 :

var sayGoodMorningToUserStored = "myNewChangedValue" 

var sayGoodMorningToUserStored = greeting + username 
클래스가 초기화 될 때

이있는 반면, 설정됩니다

var sayGoodMorningToUserComputed:String { 
    return greeting + username 
} 

모든 시간을 평가한다 속성에 액세스합니다.

간단한 예제는 firstNamelastName을 가지고 있지만 또한 fullName이 필요한 클래스입니다. 일반 속성을 사용하면 firstName 또는 lastName을 업데이트 할 때마다 일치하도록 fullName을 업데이트해야합니다. 계산 된 속성을 사용하면 fullName에 액세스 할 때마다 최신 정보를 얻을 수 있습니다. 단지 기능과 같은

관련 문제