-
Swift - Property ObserverProgramming/Swift 2021. 10. 26. 11:18
안녕하세요 Beepeach입니다 :)
오늘은 Property Observer(프로퍼티 감시자)에 대해서 공부해보도록 하겠습니다.
Property observer는 프로퍼티 값이 변할 때 원하는 작업을 할 수 있도록 하는 기능입니다.
단어처럼 프로퍼티를 감시하고 있다가 값이 변할 때 호출됩니다.
Property observer는 세 가지 경우에만 사용할 수 있습니다.
- Stored Property
- 상속받은 Stored Property
- 상속받은 Computed Property
(Inheritance(상속)에 대해서는 이후에 자세히 다루겠습니다.)
상속받지 않은 computed property는 setter에서 기능을 구현하면 되므로 observer가 필요 없습니다
그리고 let으로 선언된 프로퍼티에는 선언할 수 없습니다.
상수라면 값이 변하지 않으니 observer가 필요가 없겠죠??
그리고 프로퍼티 값이 이전과 같은 값으로 변경이 돼도 observer는 호출됩니다.
그럼 사용 방법을 알아보겠습니다!
Property Observer
Stored property에 observer를 선언하는 방법입니다.
willSet은 값이 변경되기 전에 호출이 됩니다.
parameterName을 지정하지 않으면 NewValue라는 상수를 사용할 수 있습니다.
didSet은 값이 변경된 직후에 호출됩니다.
마찬가지로 parameterName을 지정하지 않으면 OldValue라는 상수를 사용할 수 있습니다.
StepCounter라는 class를 만들었습니다.
totalSteps라는 저장 프로퍼티에 observer를 선언했습니다.
willSet은 newTotalSteps라는 parameterName을 사용하여 변경될 값을 출력하도록 했습니다.
didSet은 oldValue라는 기본 파라미터를 사용하여 변경되기 전의 값을 사용했습니다.
didSet은 값이 변경된 후에 호출되므로 현재 값을 사용하고 싶다면 프로퍼티 이름을 사용하면 됩니다.
추가로 알면 좋은 것들??
만약 Default Value가 없는 저장 프로퍼티라면 처음 초기화 시점에는 observer가 호출되지 않습니다.
이후에 값이 변경될 때 호출됩니다.
처음에 square 인스턴스를 생성할 때 호출이 되지 않는 것을 확인할 수 있습니다.
그리고 프로퍼티의 값을 변경하니 호출이 됩니다.
변경되는 값이 이전의 값과 같더라도 observer는 호출이 되는 것 또한 확인할 수 있습니다.
Global 및 Local에서 사용하기
Property Observer도 마찬가지로 global 및 local 스코프에서 사용이 가능합니다.
Global 스코프에서 사용한 예시를 보겠습니다.
그리고 또한 local 스코프에서도 사용이 가능합니다.
참고자료
여러분의 새로운 도전을 응원합니다 | KxCoding
Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기
kxcoding.com
https://docs.swift.org/swift-book/LanguageGuide/Properties.html
Properties — The Swift Programming Language (Swift 5.6)
Properties Properties associate values with a particular class, structure, or enumeration. Stored properties store constant and variable values as part of an instance, whereas computed properties calculate (rather than store) a value. Computed properties a
docs.swift.org
728x90'Programming > Swift' 카테고리의 다른 글
Swift - Property Wrapper (0) 2021.10.28 Swift - Type Property (0) 2021.10.27 Swift - Computed Property (0) 2021.10.25 Swift - Stored Property (0) 2021.10.24 Swift - Value type vs Reference type (0) 2021.10.23