【发布时间】:2019-06-12 06:15:00
【问题描述】:
我正在尝试在 watchOS6 应用中使用 environmentObject 将我的数据模型绑定到我的视图。
我在 Xcode 11 中创建了一个简单的独立 Watch 应用。
我创建了一个新的DataModel 类
import Combine
import Foundation
import SwiftUI
final class DataModel: BindableObject {
let didChange = PassthroughSubject<DataModel,Never>()
var aString: String = "" {
didSet {
didChange.send(self)
}
}
}
在我的ContentView 结构中,我使用@EnvironmentObject 绑定这个类 -
struct ContentView : View {
@EnvironmentObject private var dataModel: DataModel
var body: some View {
Text($dataModel.aString.value)
}
}
最后,我尝试将DataModel 的实例注入到HostingController 类中的环境中-
class HostingController : WKHostingController<ContentView> {
override var body: ContentView {
return ContentView().environmentObject(DataModel())
}
}
但是,我得到一个错误:
Cannot convert return expression of type '_ModifiedContent<ContentView, _EnvironmentKeyWritingModifier<DataModel?>>' to return type 'ContentView'
错误是因为WKHostingController 是一个需要具体类型的泛型——在这种情况下为WKHostingController<ContentView>。
类似的方法在 iOS 应用中与 UIHostingController 完美配合,因为 UIHostingController 不是泛型类。
还有其他方法可以将环境注入到 watchOS 视图中吗?
【问题讨论】:
标签: swift apple-watch watchos swiftui watchos-6