2016-09-26 88 views
0

我想使Post協議繼承Equatable協議和Post協議在Equatable協議中實現方法。我不知道爲什麼會出現錯誤

我不`噸知道爲什麼錯誤發生....

請幫我...我想知道爲什麼錯誤發生..

(== Equatable協議的SWIFT 3.0方法靜態方法。因此,我用靜態方法。)

protocol Post: Equatable { 
    var referenceIndex: Int { get set} 
    var likeCount: Int { get set} 
    var likeStatus: Bool { get set} 
    var commentCount: Int { get set} 
    var commentStatus: Bool { get set} 
} 

// here. error happen... 
extension Post { 
    public static func ==(lhs: Post, rhs: Post) -> Bool { 
     return lhs.referenceIndex == rhs.referenceIndex 
    } 
} 

回答

0

嘗試其不應以012添加一看this answer

==方法,它應該在全球範圍內添加。儘管它看起來可能是一個static方法,但它仍應該被聲明爲全局函數。你可以找到關於細節here的討論。

現在......如果你宣佈你struct/class裏面你Poststructclass然後是,你可以添加一個static ==方法。但是,您已聲明和不能有任何方法。

This answer告訴你如何使執行Equatable

武裝與所有我們可以實現您Post protocol,並讓它執行Equatable像這樣:

protocol Post: Equatable { 
    var referenceIndex: Int { get set} 
    var likeCount: Int { get set} 
    var likeStatus: Bool { get set} 
    var commentCount: Int { get set} 
    var commentStatus: Bool { get set} 
} 

func ==<T : Post>(lhs: T, rhs: T) -> Bool { 
    return lhs.referenceIndex == rhs.referenceIndex 
} 

然後,證明一切正常:

struct SomePost: Post { 
    var referenceIndex: Int 
    var likeCount: Int 
    var likeStatus: Bool 
    var commentCount: Int 
    var commentStatus: Bool 
} 

let somePost1 = SomePost(referenceIndex: 1, likeCount: 1, likeStatus: true, commentCount: 1, commentStatus: true) 
let somePost2 = SomePost(referenceIndex: 2, likeCount: 1, likeStatus: true, commentCount: 1, commentStatus: true) 
let somePost3 = SomePost(referenceIndex: 1, likeCount: 1, likeStatus: true, commentCount: 1, commentStatus: true) 

somePost1 == somePost2 //false 
somePost1 == somePost3 //true 

希望幫助你

+0

== Swift 3.0中Equatable協議的方法是靜態方法。因此,我使用靜態方法。 – user3427989

+0

@ user3427989我已更新我的問題,使其與協議工作,並試圖解釋爲什麼它不應該是一個靜態方法(希望我成功:)) – pbodsk

+0

謝謝。^_ ^。 – user3427989