当我添加以下行到我的视图,我从编译器得到错误。项目现在不会编译。我从“搜索地理代码”示例中得到了这行代码。
@StateObject私人varinspectedOverlay= GraphicsOverlay ()
通用结构'StateObject'要求'GraphicsOverlay'符合'ObservableObject'
解决了!转到解决方案。
建议将这些引用类型对象放在符合的类视图模型对象中ObservableObject协议如下。看看苹果的例子在这里。
类模型:ObservableObject {let graphicsOverlay = graphicsOverlay() //…以下其他属性}
背后的原因是图形叠加并不是“具有发布者的对象类型,该发布者在对象更改之前发出。(从苹果医生)".换句话说,它不会用已发布的状态驱动UI更新,因此作为一个ObservableObject在语义上是错误的。
然而,到今天为止,在SwiftUI中还没有一个属性包装器来表示“我想在视图重新计算之间保持一个对象不变,但该对象实际上不需要是可观察的。”StateObject可以工作,但不是完美的。此外,苹果可能会远离ObservableObject在未来的版本中(球场)。
尽管如此,你还是可以遵循GraphicsOverlaytype到ObservableObject协议,例如
//在你的代码中…扩展GraphicsOverlay: ObservableObject {}
然后你可以将对象作为@StateObject没有问题。
最后,示例查看器没有得到此错误,而您的代码却得到此错误的原因是使用地理代码搜索样例中,它导入了工具包,该工具包在200.0.0-beta中添加了一些如上所示的ObservableObject一致性。我们正在考虑在200.1.0中删除此一致性。
建议将这些引用类型对象放在符合的类视图模型对象中ObservableObject协议如下。看看苹果的例子在这里。
类模型:ObservableObject {let graphicsOverlay = graphicsOverlay() //…以下其他属性}
背后的原因是图形叠加并不是“具有发布者的对象类型,该发布者在对象更改之前发出。(从苹果医生)".换句话说,它不会用已发布的状态驱动UI更新,因此作为一个ObservableObject在语义上是错误的。
然而,到今天为止,在SwiftUI中还没有一个属性包装器来表示“我想在视图重新计算之间保持一个对象不变,但该对象实际上不需要是可观察的。”StateObject可以工作,但不是完美的。此外,苹果可能会远离ObservableObject在未来的版本中(球场)。
尽管如此,你还是可以遵循GraphicsOverlaytype到ObservableObject协议,例如
//在你的代码中…扩展GraphicsOverlay: ObservableObject {}
然后你可以将对象作为@StateObject没有问题。
最后,示例查看器没有得到此错误,而您的代码却得到此错误的原因是使用地理代码搜索样例中,它导入了工具包,该工具包在200.0.0-beta中添加了一些如上所示的ObservableObject一致性。我们正在考虑在200.1.0中删除此一致性。