SwiftUI 튜토리얼 [챕터1-기초3-섹션5: 뷰의 모델 객체 채택하기]
섹션5
Model Object 채택하기
ModelData 객체를 만들었으니, 이제, 이것을 앱 데이터 저장으로서 채택하고, 뷰를 업데이트해야 한다.
스텝1
LandmarkList.swift의 @EnvironmentObject프로퍼티 선언을 뷰에 추가하고, environmentObject(_: )모디파이어를 프리뷰에 추가한다.
-modelData프로퍼티는 environmentObject(_: )모디파이어가 부모에 적용되는 한, 값을 자동으로 가진다.
스텝2
modelData.landmark를 랜드마크 필터링 할 때의 데이터로 사용한다.
스텝3
LandmarkDetail뷰를 업데이트하여, 그 환경(environment)에서 ModelData객체와 일하게 한다.
스텝4
LandmarkRow프리뷰를 업데이트하여, ModelData객체(object)와 일하게 한다.
스텝5
ContentView프리뷰를 업데이트하여, 모델 객체를 그 환경으로 추가한다. 이것은 객체가 모든 하위뷰에도 가능하도록 만들어 준다.
-만약 어떤 하위뷰가 그 환경의 모델객체를 요구하게 되면, 프리뷰는 실패한다. 하지만, 당신이 미리 보기하고 있는(previewing) 뷰는 environmentObject(_: )모디파이어를 가지지 않는다.
*다음은, 기기나 시뮬레이터에서 앱을 구동시킬 때, 앱 인스턴스(예, 사례)를 업데이트해서, 환경 안에 모델 객체를 둔다.
스텝6
LandmarksApp을 업데이트해서, 모델 인스턴스를 만들고, environmentObject(_: )모디파이어를 사용해서 ContentView로 보내준다.
-@StateObject애트리뷰트 를 사용해서 모델오브젝트(모델객체)를 초기화한다. 이 모델객체는 앱의 생애주기동안 오직 한번 주어지는 프로퍼티이다.
여기서 보이듯이, 앱 인스턴스에서 애트리뷰트를 사용할 때뿐만 아니라, 뷰안에서 사용할 때에도 이것은 true이다.
스텝7
LandmarkList.swift로 돌아가서 라이브프리뷰를 켜고, 모든 것이 잘 돌아가는지 확인한다.
섹션5 완료
다음 섹션 6