Equatable ==函数已实现但仍然崩溃

时间:2016-12-07 08:40:17

标签: ios swift equatable

在我的应用中,我有一个类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
    }
}

但是一些用户仍然会发生崩溃,我不明白为什么......有人已经遇到过这个问题或知道如何解决这个问题吗?

2 个答案:

答案 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,我会返回两个资产之间的比较。 感谢