我想声明一个 Swift 协议,要求一致的类定义一个@Published Bool
class MyModel: ObservableObject, MyProtocol {
@Published var myBool: Bool = false
.
.
}
我最好的办法是,
protocol MyProtocol {
var _myBool: Binding<Bool> { get set }
}
...但是编译器抱怨,“在作用域中找不到类型‘Binding’”
在我的例子中,实现协议的类将定义 Bool,所以我不需要共享实现(扩展),我只需要要求该类有自己的实现。
我怎样才能实现这个目标?
协议不能需要
@Published
属性,但它可以需要 Published<Bool>.Publisher
属性。然后,在您的实现中,您将有一个 lazy
var,其值为 $myBool
,这将满足协议。想要订阅该发布者的人只需直接订阅该变量即可;您只需省掉使用 $
的步骤。
protocol MyProtocol {
var myBoolPublisher: Published<Bool>.Publisher { get set }
}
class MyModel: ObservableObject, MyProtocol {
@Published var myBool: Bool = false
lazy var myBoolPublisher = $myBool
}