스위프트ui에서 코드를 보다보면 @State나 @Binding같은 annotaion을 많이 봐왔지만
이것이 뭘 뜻하는 것인지 모르고 "그 상황에서 이렇게 쓴다" 라고만 알고 있었기 때문에 이것이 무슨의미인지 공부해보았습니다.
@State나 @Binding를 프로퍼티 래퍼라고 하는데
이 프로퍼티 래퍼는 미리 정의해둔 연산을 사용할 수 있다는 것이다.
Swift UI Property Wrappers
Learn what SwiftUI's @State, @Binding, @StateObject, @ObservedObject, and other property wrappers do, and when they should be used.
swiftuipropertywrappers.com
각 프로퍼티래퍼별로 어떻게 사용해야하는지 자세히 나와있다.
한글로 나와있는 프로퍼티래퍼는 이 블로그에 자세히 나와있다.
[SwiftUI] Property Wrapper (@State, @Binding, @StateObject, @ObsevedObject, @EnvironmentObject)
SwiftUI의 경우 관련된 대부분의 요소가 프로토콜과 구조체로 구성되어 있다. View를 만들 때 사용하는 View라는 프로퍼티도 프로토콜로 되어 있고 이를 통해 View를 정의할 때에도 대부분 구조체를
ho8487.tistory.com
- 간단정리
@State : @State를 붙인 프로퍼티의 값이 바뀌게 되면, 원래 View의 모양은 무효화되고 View를 새로운 값을 사용하여 다시 그리게 된다. 읽기와 쓰기를 가능하게 해준다.
@Binding : 자식 뷰에서 값을 수정해야 하는 경우, 부모 뷰에서 바인딩할 값을 사용할 것을 표시하기 위해 앞에 $를 붙인다.
@ObservableObject : 값을 따로관리 해주고 싶을때 사용하면서 참조하고있는 곳에서 값이 변경되었는지를 알려준다. + @published 프로퍼티 래퍼를 사용해서 변경값을 공유할수있다.
@EnvironmentObject : 이는 현재 관찰 가능한 객체가 변경될 때마다 현재 View를 무효화하고 다시 View를 그릴 수 있도록 한다.
만약 property를 environmentObject로 선언하는 경우 environmentObject(:)를 선언해주어야 한다. 파라미터에는 반드시 ObservableObject 프로토콜을 채택한 객체가 들어가야 한다. 상위 뷰들의 모든 하위 뷰는 해당 값을 알고 사용할 수 있게 되는 것
@ObservedObject
ObservableObject 프로토콜을 채택한 객체를 구독하고 관찰이 가능한 @Published가 붙은 프로퍼티가 변경될 때마다 View를 무효화하는 Property Wrapper이다.
@StateObject : @ObservedObject와 거의 비슷하다 View의 라이프사이클과는 관계 없이 View가 새롭게 초기화되더라도 기존의 값을 그대로 들고 있게 된다
'Swift > SwiftUI기초' 카테고리의 다른 글
MVC와 MVVM 패턴이란? (1) | 2023.12.30 |
---|---|
SwiftUI - 버튼, UI, Image, TextFiled 구현 (0) | 2023.10.16 |
SwiftUI - 초 계산기 앱 (0) | 2023.10.11 |