在我的应用中,我有一个类Video
,它实现了Equatable
协议,因为我需要使用==(lhs:,rhs:) -> Bool
函数。我的课就是这样:
class Video: Equatable {
var url: URL!
// Some other vars
}
func ==(lhs: Video, rhs: Video) -> Bool {
return lhs.url == rhs.url
}
它总是对我有用,但有些用户崩溃的原因是protocol witness for static Equatable.== infix(A, A) -> Bool in conformance Video
。
所以我尝试了另一种方法来实现这个
的功能class Video {
var url: URL!
// Some other vars
}
extension Video: Equatable {
static func ==(lhs: Video, rhs: Video) -> Bool {
return lhs.url == rhs.url
}
}
但是一些用户仍然会发生崩溃,我不明白为什么......有人已经遇到过这个问题或知道如何解决这个问题吗?
答案 0 :(得分:2)
由于您的url
可以是nil
,因此您必须在==
func ==(lhs: Video, rhs: Video) -> Bool {
guard let lURL = lhs.url, let rURL = rhs.url else { return false }
return lURL == rURL
}
如果您的设计将两个nil
网址相同的对象视为同等,则您也必须添加此案例。
答案 1 :(得分:0)
确实,我没有想到url为nil的情况......我的Video类也有资产,所以如果url为nil,我会返回两个资产之间的比较。 感谢