[Swift] - 프러퍼티 옵저버

longlivedrgn·2023년 1월 8일
0

swift문법

목록 보기
21/36
post-thumbnail

프로퍼티 옵저버(Property Observer)

  • 프로퍼티 값의 변화를 관찰하는 것!
  • 누군가 프로퍼티에 값을 설정할 때 작동한다.
  • 저장 프로퍼티에 추가할 수 있다.

두 가지의 옵션이 존재한다.

  1. willSet → 값이 저장되기 전에 호출이된다.
  2. didSet → 새 값이 저장된 직후에 호출이된다.

willSet

  • 값이 지정되기 직전에 새로 저장될 값이 파라미터로 전달이된다.

아래와 같이 구현이 가능하다.

var name: String = "Unknown" {
    willSet(newName) {
        print("현재 이름 = \(name), 바뀔 이름 = \(newName)")
    }
}

또한, 파라미터 이름을 생략하여 아래와 같이도 설정할 수 있다.

var name: String = "Unknown" {
    willSet {
        print("현재 이름 = \(name), 바뀔 이름 = \(newValue)")
    }
}

그러면, 언제 정확히 프로퍼티 옵저버가 작동이 될까?

name = "Miro"

위와 같이 새로운 값을 설정해주면, 아래와 같이 print 문이 찍히게 된다.

현재 이름 = Unknown, 바뀔 이름 = Miro

didSet

  • 값이 저장된 직후에 이전 프로퍼티 값이 파라미터로 전달이 된다.

아래와 같이 구현이 가능하다.

var name: String = "Unknown" {
   didSet(oldName) {
        print("현재 이름 = \(name), 바뀌기 전 이름 = \(oldName)")
    }
}

그리고, 파라미터를 생략한 아래와 같은 방식으로 코드를 짧게 할 수도 있다.

var name: String = "Unknown" {
   didSet {
        print("현재 이름 = \(name), 바뀌기 전 이름 = \(oldValue)")
    }
}

그러면, 언제 정확히 프로퍼티 옵저버가 작동이 될까?

name = "Miro"

위와 같이 새로운 값을 설정해주면 didSet이 발동이 되는데,

현재 이름 = Miro, 바뀌기 전 이름 = UnKnown

✅ 추가 내용

  1. willSet & didSet은 같이 구현이 가능하다.
    • 순서는 아래와 같다.
    1. willSet 발동
    2. 저장 프로퍼티 값 변경
    3. didSet 발동

📚 참고사항

Swift) 프로퍼티 정복하기 (4/4) - 프로퍼티 옵저버(Property Observer)

0개의 댓글