Swift 3:如何编写Equatable函数
答
这不是斯威夫特版本。它也会在Swift 2上发生错误。问题是您必须定义Struct的以外的==
函数,因为它必须是全局函数。
+0
谢谢。第一次与Hashable合作,Equatable。现在很好地工作。 – selcuk
+0
@selcuk:请阅读[this](http://stackoverflow.com/help/someone-answers) –
答
任何符合Hashable协议的Swift类型都必须符合Equatable协议。因为Hashable协议是从Equatable协议(source)继承的。这就是为什么你会收到错误信息。
至于你的问题,==功能必须全局声明,因为你重写全局==操作符能够比较你定义的两个属性。使用Swift 3,你也可以在结构本身中定义==,但它必须是静态的。
struct Attributes: Hashable {
var uid: Int
var size: Size
var mimeType: mimeType
var hashValue: Int {
return uid
}
static func ==(lhs: Attributes, rhs: Attributes) -> Bool {
return lhs.size == rhs.size && lhs.mimeType == rhs.mimeType
}
}
请将代码添加为文本,而不是图像。 –
代码无法在Swift 2中运行。错误信息非常明确:**运营商只允许在全球范围** – vadian
@appzYourLife将在下次做 – selcuk