This question already has answers here:
Swift Protocol Implements 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声明为structclass,则可以,您可以在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