Skip to content

Latest commit

 

History

History
73 lines (53 loc) · 2.34 KB

02.md

File metadata and controls

73 lines (53 loc) · 2.34 KB

02 아이폰 메모

구현 화면

image

State, Observable, Environment

→ data와 UI view 사이에서 publisher-subscriber 관계를 구축하는 방법

  1. @State

    • View의 현재 상태를 간단하게 저장할 때 사용한다. 주로 String, Int처럼 간단한 타입과 함께 이용
    • state property의 값이 변경되면 해당 계층 구조 내의, 그 property에 의존하고 있는 뷰가 모두 업데이트된다
  2. @Binding

    • 상위 뷰에서 하위 뷰에 상태값을 전달해야 할 때 이용한다.
    • state 값을 view와 연결해서 변화시킬 때 이용한다. state property에 자동으로 반영된다. $ + property name
    • 값이 변화하면 하위 뷰의 값도 변화해야할 때
    struct SomeView: View {
    	@Binding var someState: Bool
    	var body: some View {
    		...
    	}
    }
    
    // SomeView를 이용하는 코드
    SomeView(someState: $someBool)
  3. 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())
  4. Environment

    • Observable은 특정 상태가 앱 내 몇개의 뷰에 의해 사용되야 할 때 이용한다.

    • 앱 내에서 전반적으로 사용되는 객체의 경우에는

      ObservableObject와 published property를 이용해서 구독 가능하게 만든 후 SwiftUI 환경에 저장하는 방법을 이용할 수 있다.