我有一个对象数组,我希望通过两个条件对它们进行过滤,如果对象在某个特定的组中,或者它有一个特定的名称,但我无法弄清楚它为什么不起作用。
这是我的代码:
let outputfiler = array.filter({$0.group.contains (where: {$0 == "groupBig" }) } || $1.name.contains(where: {$1 == "Eis"}) )
这是我得到的错误:
匿名闭包参数未包含在闭包
中
编辑: 集团是一系列的trings, 只是一个字符串。
我也试过这个:
outputfiler = array.filter{$0.group.contains (where: {$0 == "groupBig" }) || $0.name(where: {$0 == "Eis"}) }
但后来我收到了这个错误:
Extraneous argument label 'where:' in call
答案 0 :(得分:4)
您需要如下过滤器(为清晰起见,在多行显示):
df
Code ABCD GFHTI
Time
20100101_00:01:33.436-92.451 24 None
20100101_00:01:33.638-92.651 None 25
您的过滤器在let outputfiler = array.filter({
$0.group.contains(where: { $0 == "groupBig" }) ||
$0.name.contains("Eis")
})
之前已关闭}
。假设||
是name
,String
只需要搜索字符串,而不是闭包。
答案 1 :(得分:1)
此语法应该有效。
let outputfiler = array.filter{$0.group.contains("groupBig") || $0.name.contains("Eis")}
答案 2 :(得分:0)
这是我在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())
}
祝你有美好的一天♥️。