Swift/SwiftUI기초

SwiftUi - annotation 과 Property Wrapper

Teol 2023. 12. 29. 17:04

스위프트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