2016-12-07 62 views
-1

在我的应用程序中,我有一个类Video,它实现Equatable协议,因为我需要使用==(lhs:,rhs:) -> Bool函数。我的班是因为这样:Equatable ==功能实现但仍然崩溃

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

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

+3

'!'是你的问题。 – user28434

回答

1

由于您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

如果两个URL都是'nil',则应该返回'true'。 – ganzogo

+1

@ganzogo它取决于需求,也许'无'值是无关紧要的。无论如何,代码避免了崩溃。 – vadian

0

事实上,我没有考虑过url是零的情况......我的视频类也有资产,所以如果url为零,我会返回两个资产之间的比较。 谢谢

相关问题