프로퍼티를 계산하고 관찰하기 위해 위에서 설명한 기능은 전역 변수 (global variables) 와 지역 변수 (local variables) 에도 사용할 수 있다. 전역 변수는 함수, 메서드, 클로저, 또는 타입 컨텍스트의 외부에 정의된 변수이다. 지역 변수는 함수, 메서드, 또는 클로저 컨텍스트 내에 정의된 변수이다.
이전 챕터에서 본 전역과 지역 변수는 모두 저장된 변수 (stored variables) 이다. 저장된 프로퍼티처럼 저장된 변수는 타입의 값을 위한 저장소를 제공하고 값을 설정하고 조회하는 것을 허락한다.
그러나 전역 또는 지역 범위로 계산된 변수 (computed variables) 와 저장된 변수를 위한 관찰자를 정의할 수도 있다. 계산된 변수는 값을 저장하기 보다 값을 계산하고 계산된 프로퍼티와 같은 방법으로 작성된다.
Note
전역 상수와 변수는 지연 저장된 프로퍼티 (Lazy Stored Properties)와 유사한 방법으로 항상 느리게 계산된다. 지연 저장된 프로퍼티와 다르게 전역 상수와 변수는 lazy 수식어가 필요하지 않다.
지역 상수와 변수는 절대 느리게 계산되지 않는다.
계산된 지역 변수에 프로퍼티 래퍼를 적용할 수 있지만 전역 변수 또는 계산된 변수에는 적용할 수 없다. 예를 들어 아래 코드에서 myNumber 는 프로퍼티 래퍼로 SmallNumber 를 사용한다.
func someFunction() {
@SmallNumber var myNumber: Int = 0
myNumber = 10
// now myNumber is 10
myNumber = 24
// now myNumber is 12
}
프로퍼티에 SmallNumber 를 적용할 때와 마찬가지로 myNumber 값을 10으로 설정하는 것이 유효하다. 프로퍼티 래퍼는 12보다 큰 값을 허용하지 않기 때문에 myNumber 를 24 대신 12로 설정한다.