我有一个带有散列协议的模型
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'
我知道我需要实现一些功能等等,但我不想这样做。
1条答案
按热度按时间5lhxktic1#
不幸的是,如果你想给
Model
结构体添加一个弱委托属性,你需要手动实现Hashable
和Equatable
协议。这是因为
Hashable
和Equatable
的默认实现仅适用于包含可哈希和可相等属性的结构体,并且弱引用无法进行比较或哈希。此外,如果您没有实现
Equatable
协议,您将无法使用==
运算符来比较Model结构体的示例,这可能是您的用例所必需的。但是,您可以使用代码生成工具为您生成Hashable和
Equatable
实现,例如使用“编辑器”菜单-〉“生成Hashable...”或像Sourcery
这样的第三方工具。