강신규

[Swift] didSet,willSet 이란 본문

iOS/Swift

[Swift] didSet,willSet 이란

kangnew 2024. 8. 27. 17:17

didSet,willSet 이란

willSetdidSet은 프로퍼티 옵저버로서 특정 프로퍼티 값이 변경이될때 이를 감지하고 특정 코드를 실행할 수 있게 해줍니다. 이 두가지는 객체의 상태관리와 동작을 제어하는 데 도움을 줍니다.

 

willSet

 

프로퍼티의 값이 실제로 변경되기 직전에 호출이 됩니다.

값이 변경되기 이전에 어떤 작업을 수행할 때 사용됩니다.

var name: String = "John" {
    willSet(newName) {
        print("이름이 곧 \(newName)으로 변경될 것입니다.")
    }
}

name = "Alice"
// 출력: 이름이 곧 Alice으로 변경될 것입니다.

 

 

didSet

 

프로퍼티의 값이 실제로 변경된 직후에 호출됩니다.

값이 변경된 후에 어떤 작업을 수행할 때 사용됩니다.

var age: Int = 30 {
    didSet(oldAge) {
        print("나이가 \(oldAge)에서 \(age)로 변경되었습니다.")
    }
}

age = 31
// 출력: 나이가 30에서 31로 변경되었습니다.


//////////////////////////////////////////////
var todoItems : Results<Item>?
  
var selectedCategory : Category? {
      //변경된 직후 호출
      didSet{
          loadItems()
      }
  }
  
func loadItems() {
        todoItems = selectedCategory?.items.sorted(byKeyPath: "title", ascending: true)
        tableView.reloadData()
  }

 

 

왜 사용해야할까 or 나만의 고민

개인프로젝트 진행중 selectedCategory가 변화하였을때 이를 감지하고 UI에 업데이트를 해줘야 했었는데 didSet을 통해 문제를 해결한 경험이 있음 이를 통해 어떤 속성의 변화를 감지하여 상태 변화를 쉽게 감지하고 처리할 수 있게 해주는 도구 그리고 코드가 직관적이라 깔끔하다