Я пытаюсь использовать environmentObject
в приложении watchOS6 для привязки моей модели данных к моему представлению.
Я создал простое автономное приложение Watch в Xcode 11.
Я создал новый 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>
в этом случае.
Подобный подход прекрасно работает с UIHostingController
в приложении для iOS, поскольку UIHostingController
не является универсальным классом.
Есть ли какой-либо другой способ внедрить среду в представление watchOS?