EnvironmentObject

Woozoo·2023년 1월 2일
0

깃헙스위프트기초

목록 보기
37/38
post-thumbnail

EnvironmentObject

Previously

1. Value 타입의 Single Source of truth 전달하기

2. Reference(Object) 타입의 Single Source of truth 전달하기

3. Reference(Object) 타입의 Single Source of truth 전달하기

  • 여러 뷰에 걸쳐서

4.Reference(Object) 타입의 Single Source of truth 전달하기

  • 여러 뷰에 더 걸쳐서

5. Reference(Object) 타입의 Single Source of truth 전달하기

  • 여러뷰에 🔥더 걸쳐서
  • 중간 뷰에서는 Single Source of truth 필요없는 경우는?

6. 5번과 같은 상황에서 EnviromentObject 사용해서 전달

  • Reference(Object) 타입의 Single Source of truth 전달하기
  • 여러뷰에 🔥더 걸쳐서
  • 중간 뷰에서는 Single Source of truth 필요없는 경우는?
  • 이럴때, EnviromentObject 를 이용해서 전달 가능

어떻게, @EnvironmentObject 클래스 만들까?

  • @StateObject, @ObservedObject 만들던 클래스와 똑같음
  • observable protocol 사용해서 class 생성
  • 변경에 대한 옵저빙이 필요한 프로퍼티는 앞에 @Published 붙이기
    • @Published 가 붙은 프로퍼티의 값이 변경될때 마다 Observable class 를 통해 알아차림
class Contact: ObservableObject {
    @Published var name: String
    @Published var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    func haveBirthday() -> Int {
        age += 1
        return age
    }
}

let john = Contact(name: "John Appleseed", age: 24)
cancellable = john.objectWillChange
    .sink { _ in
        print("\(john.age) will change")
}
print(john.haveBirthday())

참조

profile
우주형

0개의 댓글