본문 바로가기
Ios/Swift UI

@Environment로 커스템 데이터모델을 환경에서 가져오기

by 잘먹는 개발자 에단 2024. 7. 22.

ModelData 라는 데이터 모델이 있다고 가정하고 이를 Swift UI의 환경에 주입한 후, 뷰에서 이것을 사용해보기!

 

1. 데이터 모델 정의

 

먼저, ModelData라는 간단한 데이터 모델을 정의합니다.

import Foundation
import Combine

class ModelData : ObservableObject{
	@Published var someData : String = "Initial Data"
}

 

- @Published는 데이터 모델의 특정 속성이 변경될 때, 이를 자동으로 알리고, 그 변화를 구독하는 모든 뷰를 업데이트합니다.

 

 

 

2. 데이터 모델을 환경에 주입합니다.

 

Swift UI 앱의 진입점에서 데이터 모델을 환경에 추가합니다.

import SwiftUI

@main
struct ExampleApp : App{
	@StateObject private var modelData = ModelData()
    
    var body : some Scene{
    	WindowGroup{
        	ContentView()
            	.environmentObject(modelData)
                // modelData를 환경에 주입한다.
        }
    }
}

 

- 이렇게 되면 modelData가 변할때마다 해당 변화를 구독하는 모든 뷰를 업데이트하게 됩니다.

 

 

 

3. 환경에서 데이터모델을 사용합니다.

 

이제 ContentView에서 ModelData를 환경에서 가져와서 사용할 수 있습니다.

import SwiftUI

struct ContentView : View{
	@EnvironmentObject var modelData : ModelData
    // 환경에서 modelData를 가져온다.
    
    var body : some View{
    	VStack{
        	Text("Data : \(modelData.someData)")
            	.padding()
                
            Button(action : {
            	modelData.someData = "Updated Data"
                // 버튼 클릭 시에 데이터를 업데이트 한다.
                // 이것은 이 데이터를 구독하는 모든 뷰의 재 렌더링을 야기한다.
            }) {
            	Text("Update Data")
            }
        }
    }
}