-1

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

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

4

2 回答 2

2

既然你url可以是nil你必须在实施时考虑这种情况==

func ==(lhs: Video, rhs: Video) -> Bool {
    guard let lURL = lhs.url, let rURL = rhs.url else { return false }
    return lURL == rURL
}

如果您的设计将两个具有两个nilurl 的对象视为相同,那么您也必须添加这种情况。

于 2016-12-07T09:28:23.127 回答
0

确实,我没有考虑 url 为 nil 的情况......我的 Video 类也有一个资产,所以如果 url 为 nil,我返回两个资产之间的比较。谢谢

于 2016-12-07T09:48:52.983 回答