2016-09-26 93 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

相关问题