티스토리 뷰

StateObject 출처: https://developer.apple.com/documentation/swiftui/stateobject
ObserevedObject 출처:https://developer.apple.com/documentation/swiftui/observedobject/wrapper
EnvironmentObject 출처:https://developer.apple.com/documentation/swiftui/environmentobject

 

Apple Developer Documentation

 

developer.apple.com

 

Apple Developer Documentation

 

developer.apple.com


주의: 철저하게 개인 이해용입니다.
StateObject, ObservedObject, EnvironmentObject 를 이해하기 위해 Apple Devloper Documetation을 읽어보자.


"observable object를 생성할 때 사용하는 property wrapper type "


Declaration

@frozen @propertyWrapper struct StateObject<ObjectType> where ObjectType: ObservableObject

*@frozen
**@propertyWrapper
***ObservableObject


Overview - State Object

StateObject를 View, App, Scene안에 생성하세요. @StateObject특성을 property declaration으로 적용하세요 그리고 제공하세요 ObservableObject를 준수하는 initial value를.

@StateObject var model = DataModel() // precede declaration data structure with @StateObject

SwiftUI는 단한번만 각각의 instance의 구조가 선언된 오브잭트 객체를 새로운 instance로 생성합니다.(Swift UI는 이러한 객체를 한번만 instance로 생성시킨다.) observable object change의 특성을 published할 때 (StateObject로 생성된 데이터 모델은 observabled된 특성이 바뀌고 notify 될 때), SwiftUI는 업데이트 합니다 any view의 일부분을 아래 properties에 depend on되어있는. (구독중인 view를 바꿔준다.)

Text(model.text) // Updates the view any time `title` changes.

너는 Stateobject를 전달 할 수 있습니다 ObservedObject인 속성을 가진 객체의 property로 전달 할 수 있습니다. 너는 environmentObject(_:)를 사용하여 view hireachy에 environment object로 추가할 수 있습니다.

ContentView()
	.environmentObject(model)

만약 니가 environment object를 생성한다면 아래 보이는 코드와 같이, 너는 object를 읽을 수 있습니다 ContentView 내부를 혹은 EnvironmentObject특성을 사용한 자손을. (@EnvironmentObject property로 받아라.)

@EnvironmentObject var model: DataModel

****Binding을 가지오세요 state object의 하나로 $ sign을 사용하여. 사용하세요 binding을 네가 오브젝트의 특성간에 two-way connection을 만들고 싶다면. 예를들어 너는 Toggle 을 만들 수 있다 model에 isEnabled로 불리는 Boolean값을 control하는.

Toggle("Enabled", isOn: $model.isEnabled) // View Object - DataObject

Overview - ObservedObject

PropertyWrapper의 타입, observable object임을 설명하고 observable object가 바뀔 때 마다 view를 invalidate시킨다 (업데이트 시킨다.)


*@frozen: swift attributes 나중에 새로운 case가 추가되지 않음을 보장. default 과정을 없애 불필요한 부분을 없애주고 컴파일시간을줄일 수 있음. (참조: https://chibest.tistory.com/99)

**PropertyWrapper: 프로퍼티 래퍼로 object를 감싸주어 미리 선언한 특성을 주입하여 사용. (참조: https://zeddios.tistory.com/1221)

***ObservableObject

****Binding

 

'Study > iOS' 카테고리의 다른 글

[Swift UI] App Structure and Behavior - App (protocol)  (0) 2022.02.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함