玩弄那里的例子。找到了一个项目,该项目的类是可绑定的对象,没有给出任何错误。现在Xcode 11 beta 4已经发布,我得到了错误:
类型“ UserSettings”不符合协议“ BindableObject”
它在错误上有一个修复按钮,当您单击它时,它会添加
typealias PublisherType = <#type#>
Run Code Online (Sandbox Code Playgroud)
希望您填写类型。
类型是什么?
class UserSettings: BindableObject {
let didChange = PassthroughSubject<Void, Never>()
var score: Int = 0 {
didSet {
didChange.send()
}
}
}
Run Code Online (Sandbox Code Playgroud)
kon*_*iki 59
Beta 4 发行说明说:
BindableObject协议的要求现在是willChange而不是didChange,并且应该在对象更改之前而不是更改之后发送。此更改可以改进更改通知的合并。(51580731)
您需要将代码更改为:
class UserSettings: BindableObject {
let willChange = PassthroughSubject<Void, Never>()
var score: Int = 0 {
willSet {
willChange.send()
}
}
}
Run Code Online (Sandbox Code Playgroud)
在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
}
Run Code Online (Sandbox Code Playgroud)
在 Xcode 11.X 中,我验证在 Xcode 11.2.1、11.3 中没问题。
BindableObject 更改为 ObservableObject。
ObjectBinding 现在是 ObservedObject。
didChange 应该更改为 objectWillChange。
List(dataSource.pictures, id: .self) { }
Run Code Online (Sandbox Code Playgroud)
您现在还可以摆脱 did/willChange 发布者和 .send 代码,只制作图片 @Published
其余的将自动为您生成。
例如:
import SwiftUI
import Combine
import Foundation
class RoomStore: ObservableObject {
@Published var rooms: [Room]
init(rooms: [Room]) {
self.rooms = rooms
}
}
struct ContentView: View {
@ObservedObject var store = RoomStore(rooms: [])
}
Run Code Online (Sandbox Code Playgroud)
参考:https : //www.reddit.com/r/swift/comments/cu8cqk/getting_the_errors_pictured_below_when_try_to/
归档时间: |
|
查看次数: |
3632 次 |
最近记录: |