【问题标题】:I don`t know why error happen [duplicate]我不知道为什么会发生错误[重复]
【发布时间】:2016-09-26 06:13:20
【问题描述】:

我想让那个 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
    }
}

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    试试看this answer

    您的== 方法不应添加到extension 中,而应全局添加。即使它看起来像是一个static 方法,它仍然应该被声明为一个全局函数。详情可以找here讨论。

    现在...如果您已将 Post 声明为 structclass,那么是的,您可以在 struct/class 中添加 static == 方法。但是,您已声明 protocolprotocol 不能有任何方法。

    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
    

    希望对你有帮助

    【讨论】:

    • == swift 3.0 中 Equatable 协议的方法是静态方法。因此,我使用静态方法。
    • @user3427989 我已经更新了我的问题以使其适用于协议并试图解释为什么它不应该是静态方法(希望我成功了:))
    • 不客气,祝你好运:)
    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    相关资源
    最近更新 更多