具有集合运算符的数组过滤器

时间:2018-12-12 12:02:44

标签: swift nsarray nspredicate

array.filtered在Swift中不再存在,我正在寻找一种在array.filter闭包中使用'IN'运算符的方法,就像我在NSPredicate中使用它的方法一样。

在查询之前类似

let predicate = NSPredicate(format: "(user in %@)", overallUsers)
tasksArray.filtered(using: predicate)

现在这不能与swift4一起使用,那么如何使用array.filter {}实现相同的目的?我尝试过这样的事情

tasksArray.filter{$0.user in overallUsers}

此操作失败,错误为“无法将类型'@lvalue User'的值转换为闭包结果类型'Bool'。该如何实际完成?

2 个答案:

答案 0 :(得分:1)

您需要像这样的东西来代替tasksArray.filter{$0.user in overallUsers}

tasksArray.filter { task in
    overallUsers.contains(task.user)
}

要求:User必须符合Equatable

答案 1 :(得分:1)

您可以像这样检查它。

taskArray.filter( { overallUsers.contains($0.user) } )