[SwiftUI] @EnvironmentObjectかシングルトンパターンか

複数のviewをまたぐstateを管理するのに、@EnvironmentObjectを使用する方法か、シングルトンパターンで実装する方法かがありそうなのでどちらが良いのだろうか。


コーディングエージェントは以下のようにシングルトンパターンで実装してきた。

class StorageService: ObservableObject {
static let shared = StorageService()
...
}
struct HomeView: View {
@StateObject private var storageService = StorageService.shared
...
}

どうも@EnvironmentObjectの方を使えると今っぽいようなのでそちらに書き換えてみる。


*App.swiftで@StateObjectとして定義して、

    @StateObject private var storageService = StorageService()

同じ*App.swift内でenvironmentObjectとして登録

            ZStack {
...
}
            .environmentObject(storageService)

子View内で@EnvironmentObjectとしてDIを行う

    @EnvironmentObject private var storageService: StorageService


組み合わせて利用するケースも含め、似たような議論はいくつかありそう。

【SwiftUI】@EnvironmentObjectはシングルトンにした方が良い話

【SwiftUI】Singleton と EnviromentObject

Related Articles