需要定义 @Published Bool 的 Swift 协议

问题描述 投票:0回答:1

我想声明一个 Swift 协议,要求一致的类定义一个@Published Bool

class MyModel: ObservableObject, MyProtocol {
    @Published var myBool: Bool = false

    .
    .
}

我最好的办法是,

protocol MyProtocol {
    var _myBool: Binding<Bool> { get set }
}

...但是编译器抱怨,“在作用域中找不到类型‘Binding’”

在我的例子中,实现协议的类将定义 Bool,所以我不需要共享实现(扩展),我只需要要求该类有自己的实现。

我怎样才能实现这个目标?

swift
1个回答
0
投票

协议不能需要

@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
}
© www.soinside.com 2019 - 2024. All rights reserved.