씬디의 블로그
[Swift] 클래스 기반의 Realm에서는 didSet이 동작을 안한다? (Property Observer - Class와 Struct에서의 동작 차이) 본문
[Swift] 클래스 기반의 Realm에서는 didSet이 동작을 안한다? (Property Observer - Class와 Struct에서의 동작 차이)
cyndi 2024. 2. 29. 13:31Swift
Class 기반의 Realm에서는 didSet이 동작을 안한다?
Realm은 클래스 기반이다
클래스 기반에서는 프로퍼티 옵저버가 동작을 안한다?
프로퍼티 옵저버란?
Property Observer, 그대로 해석하면 Property를 관찰하는 자 인데
Property의 값을 관찰하다가 변경되면 호출하게 되는 녀석이다
'값이 변경되면 호출' 이라면 '값'에 의미를 두어야 한다
값 타입, 구조체에서만 Property Observer가 동작하고,
참조 타입인 클래스에서는 값이 변한게 아니기 때문에 Property Observer가 동작하지 않는 것이다
그러면 Realm은 클래스 기반이니 Property Observer가 동작할 수 없다
그래서 Realm 데이터에서 Property Observer 동작이 필요하다면
구조체 형태 [CoinRealmModel] 배열로 바꾸게 된 것이다
4. 배열이 구조체인가?
예에 그렇습니다
공식 문서에서 보여주는 예를 들자면
[1, 2, 3, 4, 5]가 할당되어 있는 변수 numbers를 -> 또 다른 변수 numbersCopy에 할당했다
numbers 변수 [0] 번 자리에 숫자 100을 넣으면
numbers는 [100, 2, 3, 4, 5] 가 되지만,
numbersCopy의 배열에는 영향을 끼치지 않는다
왜냐! 배열은 구조체로 구현되어있기 때문!
numbers와 동일하게 firstCopy, secondCopy 변수를 만들고
numbers 자리에 다른 숫자를 넣는들 firstCopy와 secondCopy는 멀뚱멀뚱 가만히 있는 것이다
그래서 클래스 기반의 Realm의 데이터의 값을 변경시켜 Property Observer를 동작시키게 하려면
구조체인 배열 형태로 바꾸는 것이다!
'App > Swift' 카테고리의 다른 글
[Swift] 프로퍼티 정복 (0) | 2024.05.26 |
---|---|
[Swift] 앱의 생명주기 (1) | 2024.05.21 |
[UIKit] UITextField Border Style 테두리 없애기 (0) | 2024.01.13 |
[UIKit] UITextField Left padding (1) | 2024.01.13 |
[UIKit] Dynamic height (cell의 높이를 동적으로 바꾸는 동작) (0) | 2024.01.09 |