[Swift 문법] 프로퍼티 감시자

!·2022년 6월 26일
0

Swift 문법

목록 보기
16/27

프로퍼티 감시자

  • 프로퍼티의 값이 변경될 때, 원하는 동작을 수핼할 수 있도록 한다.
  • 연산 프로퍼티 내부에는 프로퍼티 감시자기능을 수행하는 willSet, didSet 을 사용할 수 없다. -> 프로퍼티 감시자저장 프로퍼티의 값이 변경될 때 정의할 수 있는 것이기떄문에, 반드시 저장 프로퍼티 내부에 구현되어야 한다.
  • 값이 변경될 때 블록이 실행되지만, 변경되기 이전의 값과 동일한 값으로 변경이 되어도 블록이 실행된다.
  • 상속받지 않은 연산 프로퍼티 에는 프로퍼티 감시자를 적용할 수 없지만, 상속받은 연산 프로퍼티 에는 오버라이드를 통해 감시자를 적용할 수 있다.
struct Money{
    var currencyRate: Double = 1100{
    	willSet(newRate){ // newValue로 자동 할당 가능
        	print("환율이 \(currencyRate)에서 \(newRate)로 변경될 예정입니다.")
            didSet(oldRate){ // oldValue로 자동 할당 가능
            	print("환율이 \(oldRate)에서 \(currencyRate)로 변경되었습니다.")
        }
        
    var dollar : Double = 0{
    	willSet{
        	print("\(dollar)에서 \(newValue)로 변경될 예정입니다.")
        }
        didSet{
        	print("\(oldValue)에서 \(dollar)로 변경되었습니다.")
        }
  
    var won : Double{
    	get {
        	return dollar * currencyRate
        }
        set {
        	dollar = newValue / currencyRate
        }
    }
}

지역변수, 전역변수

  • 프로퍼티 감시자 또한 연산 프로퍼티와 마찬가지로 지역변수/전역변수에서 모두 사용 가능하다.
var a: Int = 100{
	willSet{
    	print("a의 값이 \(a)에서 \(newValue)로 변경될 예정입니다.")
  	}
    didSet{
    	print("a의 값이 \(oldValue)에서 \(a)로 변경되었습니다.")
    }
}

// a의 값이 100에서 200로 변경될 예정입니다.
a = 200
// a의 값이 100에서 200으로 변경되었습니다.
profile
개발자 지망생

0개의 댓글