Post

Swift - 프로퍼티 옵저버란?

Swift - 프로퍼티 옵저버란?

이전글에서 이어짐.

프로퍼티 옵저버란?

  • 저장 프로퍼티의 값이 바뀔 때 전/후처리를 할 수 있도록 해주는 구문을 의미함.
  • willSet: 값이 바뀌기 전에 호출됨.
    • 새롭게 할당되는 값이 인자값으로 넘어옴.
    • 매개변수명을 생략할 경우 newValue라는 상수명으로 접근 가능함.
  • didSet: 값이 바뀐 후에 호출됨.
    • 기존에 할당되어 있던 값이 인자값으로 넘어옴.
    • 매개변수명을 생략할 경우 oldValue라는 상수명으로 접근 가능함.

willSet 구문

1
2
3
4
5
var 변수명: 데이터타입 = [초기값]{
  willSet (매개변수명){
    실행 구문
  }
}

didSet 구문

1
2
3
4
5
var 변수명: 데이터타입 = [초기값]{
  didSet (매개변수명){
    실행 구문
  }
}

예시 1

1
2
3
4
5
6
7
8
9
10
struct Player{
    var level: Int{
        willSet{
            print("\(level)에서 \(newValue)로 레벨이 변경되었습니다.")
        }
    }
}

var player = Player(level: 10)
player.level = 20

결과

1
10에서 20로 레벨이 변경되었습니다.

예시 2

1
2
3
4
5
6
7
8
9
10
struct BankAccount{
    var balance: Int{
        didSet{
            print("\(oldValue)에서 \(balance)으로 변경되었습니다.")
        }
    }
}

var account = BankAccount(balance: 1000)
account.balance = 2000

결과

1
1000에서 2000으로 변경되었습니다.

예시 3

1
2
3
4
5
6
7
8
9
10
11
12
13
struct Car{
    var speed: Int{
        willSet(value){
            print("\(speed)\(value)으로 바뀔 예정")
        }
        didSet{
            print("\(oldValue)\(speed)으로 바뀌었다")
        }
    }
}

var car = Car(speed: 10)
car.speed = 20

결과

1
2
10이 20으로 바뀔 예정
10이 20으로 바뀌었다

프로퍼티 옵저버는 init 시에는 호출되지 않음.

This post is licensed under CC BY 4.0 by the author.