구현 화면
→ data와 UI view 사이에서 publisher-subscriber 관계를 구축하는 방법
-
@State
- View의 현재 상태를 간단하게 저장할 때 사용한다. 주로 String, Int처럼 간단한 타입과 함께 이용
- state property의 값이 변경되면 해당 계층 구조 내의, 그 property에 의존하고 있는 뷰가 모두 업데이트된다
-
@Binding
- 상위 뷰에서 하위 뷰에 상태값을 전달해야 할 때 이용한다.
- state 값을 view와 연결해서 변화시킬 때 이용한다. state property에 자동으로 반영된다.
$
+ property name - 값이 변화하면 하위 뷰의 값도 변화해야할 때
struct SomeView: View { @Binding var someState: Bool var body: some View { ... } } // SomeView를 이용하는 코드 SomeView(someState: $someBool)
-
Observable
-
State 는 뷰의 상태를 저장하지만 뷰 내에서만 이용이 가능하고, 뷰가 사라지면 상태도 사라진다.
-
여러 뷰들이 외부에서 접근 가능한 영구적인 데이터가 바로 observable
주로 시간에 다라 변경되는 하나 이상의 데이터 값을 모으고 관리할 때 이용한다.
// observable object import Combine class SomeData: ObservableObject { @Published var someNumber = 0 @Published var someBool = false init() { // 데이터 초기화 } func updateData() { // 데이터 최신화 } } // observing object struct ContentView: View { @ObservedObject var someData: SomeData var body: some View { Text("\(someData.someNumber)") } } // 이용할 때 ContentView(someData: SomeData())
-
-
Environment
-
Observable은 특정 상태가 앱 내 몇개의 뷰에 의해 사용되야 할 때 이용한다.
-
앱 내에서 전반적으로 사용되는 객체의 경우에는
ObservableObject와 published property를 이용해서 구독 가능하게 만든 후 SwiftUI 환경에 저장하는 방법을 이용할 수 있다.
-