swift - 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)
}
}
}
解决方案
如果我理解正确,您想将一个对象注入多个实例。您可以将 ServiceToInject 对象设为@EnvironmentObject,这样您就可以将其发送到多个其他类:https ://www.hackingwithswift.com/quick-start/swiftui/what-is-the-environmentobject-property-wrapper
推荐阅读
- reactjs - 为什么会出现“object not function”?
- php - 使用从用户输入收集的 AJAX 请求发送的 POST 数据强制下载使用 php 创建的 ics 文件
- vb6 - 使用VB6执行批处理传递两个参数,两个变量由空格分隔
- npm - 从存储库克隆后,sails.js 停止工作
- vb.net - 使用自动编号主键绑定到 MS Access 表的 DataGridView 导致并发错误
- javascript - 如何在 React 中显示来自 api 的图像
- javascript - 当 Bootstrap 表的每一行中都有一个具有唯一 ID 的按钮时,如何通过单击按钮发出 Socket IO 消息?
- java - 有没有办法创建一个对象,其中对象类由另一个变量定义?
- python - 如何计算另一个列表中的列表(作为熊猫列)中匹配元素的数量
- javascript - 将动画添加到 jQuery 平滑滚动到锚点