2016-12-07 64 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爲零,我會返回兩個資產之間的比較。 謝謝

相關問題