swift 可散列结构\类中的用户委托协议

0aydgbwb  于 2023-03-28  发布在  Swift
关注(0)|答案(1)|浏览(119)

我有一个带有散列协议的模型

struct Model: Hashable {
        let titleText: String
    }

我想像这样在里面添加一个协议属性

protocol SomeDelegate: AnyObject {
    func delegateMethod()
}

struct Model: Hashable {
        let titleText: String
        weak var delegate: SomeDelegate?
    }

我可以这样写吗?我可以以某种方式隐藏hashable的委托属性吗?我不想在Model中写static func ==和其他函数
Xcode告诉我

Type 'Model' does not conform to protocol 'Hashable'
Type 'Model' does not conform to protocol 'Equatable'

我知道我需要实现一些功能等等,但我不想这样做。

5lhxktic

5lhxktic1#

不幸的是,如果你想给Model结构体添加一个弱委托属性,你需要手动实现HashableEquatable协议。
这是因为HashableEquatable的默认实现仅适用于包含可哈希和可相等属性的结构体,并且弱引用无法进行比较或哈希。
此外,如果您没有实现Equatable协议,您将无法使用==运算符来比较Model结构体的示例,这可能是您的用例所必需的。
但是,您可以使用代码生成工具为您生成Hashable和Equatable实现,例如使用“编辑器”菜单-〉“生成Hashable...”或像Sourcery这样的第三方工具。

相关问题