通过绑定使用 NSPredicate 过滤自定义对象的数组


class MyClass {
    var result: Bool
    init(result: Bool) {
        self.result = result
     } 
}

我的ArrayController中有一个通过绑定连接的数组( [MyClass] (,我需要按属性result过滤这个数组。

例如,这些对象中有一半结果为 false,我只想显示这些具有 result == true 的项目,但它必须使用 NSPredicate 完成,我不知道如何制作这个谓词,有什么想法吗?

为了清楚起见,我需要使用 NSArrayController 变量filterPredicate来过滤这个数组。

首先,你的类 MyClass必须符合 NSObject,这会将声明变成,

class MyClass: NSObject {
var result: Bool
init(result: Bool) {
    self.result = result
 } 
}

然后,您可以将 NSPredicate 应用为,

let bPredicate: NSPredicate = NSPredicate(format: "result contains[cd]       %@", true)
let searchArray = yourArray.filtered(using: bPredicate) as NSArray

用户过滤器而不是 NSPredicate

'let filteredArray = yourArray.filter({$0.result == true})'

好的,我自己解决了问题。这是代码

arrayController.filterPredicate = NSPredicate { object, _ in
    (object as? MyClass)?.result
}

对于动态变量

dynamic var predicate: NSPredicate? = {
    return NSPredicate { object, _ in
        (object as? MyClass)?.result
    }
}()

最新更新