【问题标题】:Array contains method is not working properly with custom models and predicate [closed]数组包含方法不适用于自定义模型和谓词[关闭]
【发布时间】:2019-09-26 07:25:07
【问题描述】:

您好,我最近在开发过程中遇到了一个奇怪的问题。本机包含无法正常工作。以下是我的代码。

struct Hello {
    var name : String = ""
    var address: String = ""
    var phone : String = ""

    init(name: String,address: String,phone: String) {
        self.name = name
        self.address = address
        self.phone = phone
    }
}


struct Buddy {
    var phone : String = ""
    var name: String = ""
    var address: String = ""

    init(name: String,address: String,phone: String) {
        self.name = name
        self.address = address
        self.phone = phone
    }
}


var a: [Hello] = []
a.append(Hello(name: "Gaurav", address: "Address1", phone: "123456"))
a.append(Hello(name: "Kumar", address: "Address2", phone: "123457"))
a.append(Hello(name: "Singh", address: "Address3", phone: "123"))


var b: Buddy = Buddy(name: "Pawan", address: "Address1", phone: "123")
if (a.contains(where: { $0.phone != b.phone})) {
    print("doest not contain")
} else {
    print(" contain")
}

实际结果: print("不包含")

预期结果: 打印(“包含”)

【问题讨论】:

  • 请发布代码而不是链接。
  • @vadian 我已经更新了.. 请检查
  • 我认为!a.contains(where: { $0.phone == b.phone}) 将根据您的if-else 声明起作用
  • a 确实包含电话号码不同的元素。将包含与否定一起使用,!=,总是很麻烦。用简单的英语你的代码说,是否有 any 元素的电话号码不同于 b.phone
  • 请解释为什么您期望输出“包含”

标签: ios swift xcode swift4


【解决方案1】:

代码是正确的。

你正在检查

a 是否包含Hello,其电话号码不是 123。

这是true,因为甚至有两个项目的电话号码不同

【讨论】:

    【解决方案2】:

    将最后一部分改为:

    if (a.contains(where: { $0.phone == b.phone})) {
        print("contains")
    } else {
        print("does not contain")
    }
    

    它会返回正确的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多