【问题标题】:Swift 3: Array.contains(customObject)斯威夫特 3: Array.contains(customObject)
【发布时间】:2017-01-17 06:17:16
【问题描述】:

我正在尝试实现如下所示的 if 块:

    if loggedInUser.following.contains(userToView) {

    }

其中loggedInUser.following 是自定义User 类的数组,userToView 是User 类的单个实例。

class User {
    ....
}

但是,loggedInUser.following.contains(userToView) 抛出如下错误:

无法将“User”类型的值转换为预期的参数类型“(User) throws -> Bool”

我的印象是我需要实现某种功能来确定两个用户是否相等,但我不知道如何实现这样的功能。任何帮助将非常感激;提前谢谢你!

【问题讨论】:

  • 要使用 contains,您需要使您的 User 类符合 Equatable 协议
  • class User: Equatable { let name: String required init(name: String) { self.name = name } } func ==(lhs: User, rhs: User) -> Bool { return lhs.name == rhs.name }
  • let users = [User(name: "a"),User(name: "b")] 和 users.contains(User(name: "z")) // false
  • 谢谢,在谷歌上搜索了公平协议后,我能够沿着黄砖路走;这导致我实现了您刚刚建议的功能

标签: ios swift3


【解决方案1】:

你可以使用下面的代码

if (loggedInUser.following as NSArray).contains(userToView) {

}

【讨论】:

    【解决方案2】:

    谢谢大家的建议。

    在创建以下函数并实施“Equatable”协议后,一切都按预期工作:

    class User: Equatable {
        //...
        var id = Int() //Unique Identifier
        //...
    }
    
    func ==(lhs: User, rhs: User) -> Bool {
        return lhs.id == rhs.id
    }
    

    在实现上述代码后,我可以毫无问题地调用以下代码:

    if loggedInUser.following.contains(userToView) {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      相关资源
      最近更新 更多