【问题标题】:Array of objects filter with multiple validations具有多个验证的对象过滤器数组
【发布时间】:2017-08-30 07:10:13
【问题描述】:

我有一个用户对象数组,其中状态为属性。

现在我想使用状态过滤对象,它可以

状态: 等待 进行中 正义研究 没兴趣 不适用 有兴趣的 已预订

另一个属性资格 10 20 30

let array = Array<User> // assuming this has array of user values

let filteredArray = array.filter { !$0.status.contains("Waiting") || !$0.status.contains("JustResearch") !$0.status.contains("AlreadyBooked") || !$0.eligibility.contains("20")}

我需要类似上面的过滤数组应该只包含具有 InProgress、JustResearch、NotInterested 和 NotApplicable 的用户对象

我在尝试使用上述过滤器时遇到错误如何应用具有多个条件的过滤器。

【问题讨论】:

  • 错误是什么?
  • 多一个房产资格是什么意思 10 20 30 ?

标签: ios arrays swift


【解决方案1】:

你输了||

!$0.status.contains("JustResearch")

此代码将起作用:

let filteredArray = array.filter { !$0.status.contains("Waiting") || !$0.status.contains("JustResearch") || !$0.status.contains("AlreadyBooked")}

【讨论】:

    【解决方案2】:

    其实你不想检查status是否包含字符串,你想检查status是否等于字符串。

    一个可能的解决方案是创建一个 whiteList 数组。然后您可以检查数组是否包含状态。

    let array = Array<User> // assuming this has array of user values
    let whiteList = ["InProgress", "JustResearch", "NotInterested", "NotApplicable"]
    let filteredArray = array.filter { whiteList.contains($0.status) }
    

    【讨论】:

      【解决方案3】:

      使用以下代码。

      我修改了您的条件(即 !$0.status.contains("Waiting")$0.status.contains("InProgress")),因为您只需要具有 InProgress、JustResearch、NotInterested 和 NotApplicable 的用户对象。

      let filteredArray = array.filter { $0.status.contains("InProgress") || $0.status.contains("JustResearch") || $0.status.contains("NotInterested") || $0.status.contains("NotApplicable")}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-25
        • 2021-07-05
        • 1970-01-01
        • 2021-12-10
        • 1970-01-01
        • 1970-01-01
        • 2019-12-29
        • 1970-01-01
        相关资源
        最近更新 更多