스위프트UI 튜토리얼 챕터1 SwiftUI Essentials/챕터1-기초3: 사용자 인풋 다루기(6 섹션)

SwiftUI 튜토리얼 [챕터1-기초3-섹션5: 뷰의 모델 객체 채택하기]

히오나 2023. 7. 6. 15:37
728x90

섹션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

728x90