我不知道为什么会出现错误
问题描述:
我想使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
}
}
答
尝试其不应以012添加一看this answer
你==
方法,它应该在全球范围内添加。尽管它看起来可能是一个static
方法,但它仍应该被声明为全局函数。你可以找到关于细节here的讨论。
现在......如果你宣布你struct/class
里面你Post
为struct
或class
然后是,你可以添加一个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
希望帮助你
== Swift 3.0中Equatable协议的方法是静态方法。因此,我使用静态方法。 – user3427989
@ user3427989我已更新我的问题,使其与协议工作,并试图解释为什么它不应该是一个静态方法(希望我成功:)) – pbodsk
谢谢。^_ ^。 – user3427989