2016-09-26 8 views
0

私はそれを作ってみたいPost protocol inheritance EquatableプロトコルとPostプロトコルはEquatableプロトコルのメソッドを実装しています。エラーが起こる理由を私は知っている `tを私はなぜエラーが発生するのかわかりません

....

私はエラーが起こる理由を知りたい...私を助けてください..

(== SWIFT 3.0の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} 
} 

// 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の内側にあなたのstructclassなどPost [はい、あなたが追加した可能性が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

関連する問題