티스토리 뷰
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 |
---|