This question already has answers here:
Swift Protocol Implements Equatable
(2个答案)
3年前关闭。
我想使Post协议继承Equatable协议,并且Post协议在Equatable协议中实现方法。
我不知道为什么会发生错误。
请帮助我...我想知道为什么会发生错误..
(== swift 3.0中的Equatable协议方法是静态方法。因此,我使用静态方法。)
然后,证明一切正常:
希望对您有帮助
(2个答案)
3年前关闭。
我想使Post协议继承Equatable协议,并且Post协议在Equatable协议中实现方法。
我不知道为什么会发生错误。
请帮助我...我想知道为什么会发生错误..
(== 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
}
}
最佳答案
尝试看看this answer
您的==
方法不应添加到extension
中,而应全局添加。即使它似乎是一个static
方法,仍应将其声明为全局函数。您可以找到有关详细信息的讨论here。
现在...如果您已将Post
声明为struct
或class
,则可以,您可以在static ==
内添加struct/class
方法。但是,您已声明protocol
,并且protocol
不能具有任何方法。
This answer向您展示如何使用protocol
实现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
希望对您有帮助
关于ios - 我不知道为什么会发生错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39695803/
10-09 08:40