Xcode不会让我在可选对象上使用`@ObservedObject`
我有一个ObservableObject名为的类MyObjectModel被传递给这样的结构:
var body: some View {
MyView(myObjectModel)
但是在另一个上下文中,我没有要传递的模型,所以我想MyView简单地调用
var body: some View {
MyView()
所以我想我可以MyView像这样初始化
struct MyView: View {
@ObservedObject private var model: MyObjectModel?
init(model: MyObjectModel? = nil) {
self.model = model
}
但是 Xcode 不会让我使用@ObservedObject可选项。
我怎么做?
回答
该ObservedObject包装不具有可选的构造函数,现在(我们不能延长Optional与一致性ObservableObject,因为它不是一个类)。
一种可能的方法是有一些特定的标记,表明没有模型,因为它为零。
这是一个演示:
class MyObjectModel: ObservableObject {
static let None = MyObjectModel() // Like NSNull.null
}
struct MyView: View {
@ObservedObject private var model: MyObjectModel
init(model: MyObjectModel? = nil) {
self.model = model ?? MyObjectModel.None
}
var body: some View {
if self.model === MyObjectModel.None {
Text("Same as it would be nil!") // << here !!
} else {
Text("For real model")
}
}
}