首页 > 解决方案 > SwiftUI 依赖注入与环境对象

问题描述

我正在尝试创建一种将依赖项注入 SwiftUI 视图模型的解决方案,但我不知道我是否正在做某事,或者是否需要将其带回绘图表。

struct MyAppName: App {

private static var serviceToInject = ServiceToInject()

@StateObject var viewModel1 = ViewModel1(service: serviceToInject)
@StateObject var viewModel2 = ViewModel2(service: serviceToInject)

var body: some Scene {
    WindowGroup {
        if authenticationViewModel.isLoggedIn {
            HomeView()
                .environmentObject(viewModel1)
                .environmentObject(viewModel2)
        } else {
            LoginView()
                .environmentObject(viewModel2)
        }
    }
}

这是一个可能的解决方案吗?我担心在服务上使用静态。这也许是一种更好的方法:

struct MyAppName: App {

@StateObject var viewModel1 = ViewModel1(service: ServiceToInject())
@StateObject var viewModel2 = ViewModel2(service: ServiceToInject())

var body: some Scene {
    WindowGroup {
        if authenticationViewModel.isLoggedIn {
            HomeView()
                .environmentObject(viewModel1)
                .environmentObject(viewModel2)
        } else {
            LoginView()
                .environmentObject(viewModel2)
        }
    }
}

标签: swiftdependency-injectionswiftuiarchitectureinversion-of-control

解决方案


如果我理解正确,您想将一个对象注入多个实例。您可以将 ServiceToInject 对象设为@EnvironmentObject,这样您就可以将其发送到多个其他类:https ://www.hackingwithswift.com/quick-start/swiftui/what-is-the-environmentobject-property-wrapper


推荐阅读