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

Equatable == function implemented but still crashes

在我的应用程序中,我有一个 class Video 实现了 Equatable 协议,因为我需要使用 ==(lhs:,rhs:) -> Bool 函数。我的 class 是这样的:

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
    }
}

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

因为你的 url 可以是 nil 你必须在实施 ==

时考虑这种情况
func ==(lhs: Video, rhs: Video) -> Bool {
    guard let lURL = lhs.url, let rURL = rhs.url else { return false }
    return lURL == rURL
}

如果您的设计将具有两个 nil url 的两个对象视为平等的,您也必须添加这种情况。

确实,我没有考虑 url 为零的情况...我的视频 class 也有资产,所以如果 url 为零,我 return 两种资产的比较。 谢谢