swift
swift - Property #2 (Computed ProPerty, Read-Only Computed Property)
행복하게사는게꿈
2021. 1. 12. 11:08
// Computed : 수학적인 의미보다는 다른 속성을 기반으로 속성이 결정된다는 뜻
// 즉, 속성에 접근할때 마다 값이 달라질 수 있다. -> 항상 var 키워드로 시작해야함
// type을 항상 명시해줘야 하고 기본값을 설정할 수 없다.
class Person {
var name: String
var yearOfBirth: Int
init(name: String, year: Int) {
self.name = name
self.yearOfBirth = year
}
var age: Int {
get {
let calendar = Calendar.current
let now = Date()
let year = calendar.component(.year, from: now)
return year - yearOfBirth
}
set {
let calendar = Calendar.current
let now = Date()
let year = calendar.component(.year, from: now)
yearOfBirth = year - newValue // set키워드 다음 파라미터를 생략하면 age로 전달되는 값을 newValue라는 값으로 사용 가능
}
}
}
let p = Person(name: "Jae ho", year: 2002) // get블록
p.age = 50 // set블록이 실행됨
p.yearOfBirth
// 읽기 전용 computed 속성은 set이 없는 것을 빼면 동일
// get 생략하고 {}로 대체가능하다.
// type 다음에 할당 연산자가 없으면 읽기 전용, 할당자가 있으면 클로저가 된다.
// 쓰기 전용 속성만 있는건 문법적으로 허락하지 않는다.