过滤对象数组中的两个值

Filter two values in array of objects

我有一个对象数组,我想按两个条件过滤它们,要么对象在某个组中,要么它有特定名称,但我无法弄清楚为什么它不起作用。

这是我的代码:

let outputfiler = array.filter({[=10=].group.contains (where: {[=10=] == "groupBig" }) } || .name.contains(where: { == "Eis"})  )

这是我得到的错误:

Anonymous closure argument not contained in a closure

编辑: 组是一个数组, 名称只是一个字符串。

我也试过这个:

outputfiler = array.filter{[=11=].group.contains (where: {[=11=] == "groupBig" }) || [=11=].name(where: {[=11=] == "Eis"}) }

但是我得到这个错误:

Extraneous argument label 'where:' in call

您需要如下过滤器(为清楚起见显示在多行中):

let outputfiler = array.filter({
    [=10=].group.contains(where: { [=10=] == "groupBig" }) || 
    [=10=].name.contains("Eis")
})

您在 || 之前关闭了过滤器 }。假设 name 是一个 Stringcontains 只需要搜索字符串,而不是闭包。

此语法应该有效。

let outputfiler = array.filter{[=10=].group.contains("groupBig") || [=10=].name.contains("Eis")}

这是我在 Swift 5(示例)中的解决方案:

我的结构(我使用这个结构从 Firebase 中提取数据):

struct User { 

    let uid:String
    let phoneNumber:String
    let username:String
    let email:String

    init(uid:String, dictionary: [String: Any]) {
        self.uid = uid
        self.username = dictionary["username"] as? String ?? String()
        self.phoneNumber = dictionary["phoneNumber"] as? String ?? String()
        self.email = dictionary["email"] as? String ?? String()

    }

}

过滤器:

let arrayFiltered =  self.arrayUsers.filter { (user) -> Bool in
    return user.username.lowercased().contains("Dani".lowercased()) ||
           user.email.lowercased().contains("DanielXXXX@gmail.com".lowercased()) ||
           user.phoneNumber.lowercased().contains("+34111223344".lowercased())

}

祝你有美好的一天♥️。