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

时间:2017-06-12 13:24:25

标签: arrays swift macos binding nspredicate

class MyClass {
    var result: Bool

    init(result: Bool) {
        self.result = result
     } 
}

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

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

为了说清楚,我需要使用filterPredicate NSArrayController变量来过滤此数组。

3 个答案:

答案 0 :(得分:1)

首先,你的类MyClassmust符合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

答案 1 :(得分:0)

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

monolog:
    handlers:
        security:
            level:    INFO
            type:     stream
            path:     '%kernel.logs_dir%/deprecated.log'
            channels: [php]

表示动态变量

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

答案 2 :(得分:0)

用户过滤器而不是NSPredicate

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