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 两种资产的比较。
谢谢
在我的应用程序中,我有一个 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 两种资产的比较。 谢谢