[SwiftUI] MapClone: StateObject & EnvironmentObject

Junyoung Park·2022년 12월 15일
0

SwiftUI

목록 보기
129/136
post-thumbnail
post-custom-banner

Create ViewModel with @StateObject and @EnvironmentObject for MVVM | SwiftUI Map App #2

MapClone: StateObject & EnvironmentObject

구현 목표

  • 뷰 모델 구현

구현 태스크

  • @StateObject을 통해 특정 뷰 모델 관찰
  • @EnvrionmentObject 구현

핵심 코드

import Foundation

@MainActor
final class LocationsViewModel: ObservableObject {
    @Published var locations: [LocationModel]
    
    init(locations: [LocationModel] = LocationModel.stubs) {
        self.locations = locations
    }
}
  • 메인 액터를 통해 뷰 모델에 대한 동시 접근 스레드 관리
  • locations 데이터가 퍼블리셔이므로 해당 데이터가 업데이트될 때 해당 데이터를 통한 UI 업데이트
import SwiftUI

@main
struct MapCloneApp: App {
    @StateObject private var viewModel = LocationsViewModel()
    var body: some Scene {
        WindowGroup {
            LocationsView()
                .environmentObject(viewModel)
        }
    }
}
  • EnvironmentObject를 통해 뷰 모델 연결
  • 전역으로 접근 가능한 뷰 모델
import SwiftUI

struct LocationsView: View {
    @EnvironmentObject private var viewModel: LocationsViewModel
    var body: some View {
        List {
            ForEach(viewModel.locations) { location in
                Text(location.name)
            }
        }
    }
}
  • 뷰 모델의 데이터가 업데이트될 때 새로운 뷰를 그리는 뷰

구현 화면

profile
JUST DO IT
post-custom-banner

0개의 댓글