玩弄那里的例子。找到一个项目,该项目的类为bindableobject
,并且没有出现任何错误。现在Xcode 11 beta 4已经发布,我得到了错误:
类型“ UserSettings”不符合协议“ BindableObject”
它有一个关于错误的修复按钮,当您单击该按钮时,它会添加
typealias PublisherType = <#type#>
希望您填写类型。
类型是什么?
class UserSettings: BindableObject {
let didChange = PassthroughSubject<Void, Never>()
var score: Int = 0 {
didSet {
didChange.send()
}
}
}
Beta 4 发行说明说:
BindableObject协议的要求现在是willChange而不是didChange,并且现在应该在对象更改之前而不是更改之后发送。此更改可以改进更改通知的合并。(51580731)
您需要将代码更改为:
class UserSettings: BindableObject {
let willChange = PassthroughSubject<Void, Never>()
var score: Int = 0 {
willSet {
willChange.send()
}
}
}
在Beta 5中,他们再次更改了它。这次他们一起弃用了BindableObject!
BindableObject替换为Combine框架中的ObservableObject协议。(50800624)
您可以通过定义在对象更改之前发出的objectWillChange发布者来手动遵守ObservableObject。但是,默认情况下,ObservableObject自动合成objectWillChange并在任何@Published属性更改之前发出。
@ObjectBinding替换为@ObservedObject。
class UserSettings: ObservableObject {
@Published var score: Int = 0
}
struct MyView: View {
@ObservedObject var settings: UserSettings
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句