프로퍼티 감시자

- 프로퍼티 감시자를 사용하면 프로퍼티 값이 변경될 때 원하는 동작을 수행할 수 있음

 

import Foundation

struct Money {
    // 프로퍼티 감시자 사용
    var currencyRate: Double = 1100 { // currencyRate라는 프로퍼티 값이 변경이 될때 willSet, didSet이 실행
        willSet(newRate) { // 바뀔 값이 들어옴
            print("환율이 \(currencyRate)에서 \(newRate)으로 변결될 예정입니다")
        }
        
        didSet(oldRate) { // 바뀌기 전 값이 들어옴
            print("환율이 \(oldRate)에서 \(currenyRate)으로 변경되었습니다")
        }
    }
    
    // 프로퍼티 감시자 사용
    var dollar: Double = 0 {
        // willSet의 암시적 매개 변수 이름 newValue
        willSet {
            print("\(dollar)달러에서 \(newValue)달러로 변경될 예정입니다")
        }
        
        // didSet의 암시적 매개 변수 이름 oldValue
        didSet {
            print("\(oldValue)달러에서 \(dollar)달러로 변경되었습니다")
        }
    }
    
    // 연산 프로퍼티
    // 연산 프로퍼티 안에는 프로퍼티 감시자를 만들 수 없음
    // willSet, didSet은 저장되는 값이 호출될때 적용
    var won: Double {
        get {
            return dollar * currencyRate
        }
        set {
            dollar = newValue / currenctRate
        }
    }
    
    var moneyInMyPocket: Money = Money()
    
    // 환율이 1100.0에서 1150.0으로 변경될 예정입니다
    MoneyInmyPocket.currencyRate = 1150
    // 환율이 1100.0에서 1150.0으로 변경되었습니다
    
    // 0.0달러에서 10.0달러로 변경될 예정입니다
    moneyInMyPocket.dollar = 10
    // 0.0달러에서 10.0달러로 변경되었습니다
    
    print(moneyInmyPocket.won)
    // 11500.0
}

 

 

var a: Int = 100 {

willSet {

print("\(a)에서 \(newValue)로 변경될 예정입니다")

}

 

didSet {

print("\(oldValue)에서 \(a)로 변경되었습니다")

}

 

// 100에서 200으로 변경될 예정입니다

a = 200

// 100에서 200으로 변경되었습니다

'Swift > 문법' 카테고리의 다른 글

인스턴스의 생성과 소멸(init / deinit)  (0) 2021.01.29
상속(inheritance)  (0) 2021.01.28
프로퍼티(property)  (0) 2021.01.28
클로저 고급  (0) 2021.01.28
클로저(Closure)  (0) 2021.01.28
Posted by khon98
,