저장 속성은 값을 저장하고 나중에 해당 값을 읽거나 변경할 수 있습니다. 그러므로 메모리 공간을 가집니다.
인스턴스의 저장 속성에 접근하려면, 인스턴스 이름 뒤에 마침표(.)를 붙이고 속성의 이름을 사용합니다.
instanceName.propertyName
instanceName.propertyName = NewValue
let p = Person()
p.name
p.age
struct Rectangle {
var width: Double
var height: Double
}
var rect = Rectangle(width: 5, height: 3)
rect.width = 8 // 구조체의 인스턴스를 가변으로 선언하여 속성 변경
print(rect.width) // 출력: 8
let rect = Rectangle(width: 5, height: 3)
rect.width = 8 // 오류: Cannot assign to property: 'rect' is a 'let' constant
class Rectangle {
var width: Double
var height: Double
init(width: Double, height: Double) {
self.width = width
self.height = height
}
}
let rect = Rectangle(width: 5, height: 3)
rect.width = 8 // 클래스의 인스턴스는 속성 변경 가능
print(rect.width) // 출력: 8
클래스는 참조 타입이므로 let으로 선언된 인스턴스도 속성을 변경할 수 있습니다.
이는 클래스의 인스턴스가 상수로 선언되더라도 인스턴스 자체가 변경되는 것이 아니라 인스턴스에 대한 참조를 통해 속성에 접근하고 변경하기 때문입니다.
저장된 값 대신에 계산된 값을 제공하는 속성입니다. Computed Property는 특정한 코드 블록인 getter와 필요한 경우 setter를 사용하여 값을 읽고 설정할 수 있습니다. 연산 속성은 저장된 값을 갖지 않고, 각각의 접근 시점에 getter를 통해 계산된 값을 반환합니다.
Computed Property의 선언 시 기본값을 설정할 수 없으며, 따라서 형식 추론이 불가능합니다. 이러한 경우 타입을 명시적으로 선언해야 합니다.
struct Temperature {
var celsius: Double
var fahrenheit: Double {
get {
return (celsius * 9 / 5) + 32
}
set {
celsius = (newValue - 32) * 5 / 9
}
}
}
var temperature = Temperature(celsius: 25)
print(temperature.fahrenheit) // 출력: 77.0
temperature.fahrenheit = 86
print(temperature.celsius) // 출력: 30.0
읽기 전용 코드입니다.
var name: Type {
get {
statment
return expr
}
}
var name: Type {
statment
return expr
} //get 블록은 중괄호({})를 생략할 수 있으며, 나중에는 return문도 생략 가능