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 다음에 할당 연산자가 없으면 읽기 전용, 할당자가 있으면 클로저가 된다.

// 쓰기 전용 속성만 있는건 문법적으로 허락하지 않는다.