Swift 3:使用NSPredicate(格式:)按类型/类过滤对象

时间:2017-07-04 15:30:34

标签: ios swift swift3 nspredicate

我遇到了有关NSPredicate语法的问题。我想按类类型过滤对象数组。

class ClassA: NSObject {}
class ClassB: ClassA {}
class ClassC: ClassA {}

let array: [ClassA] = [ClassB(), ClassC()]

现在我想使用NSPredicate来获取仅使用ClassB项的过滤数组。

我可以使用Blocks这样做,它会是这样的:

let predicate = NSPredicate { (object, nil) -> Bool in
    return object is ClassB
}

虽然这是一种合法的方法,但我也希望使用NSPredicate(格式:)来做同样的事情。

在其他尝试中,我未能成功尝试以下内容:

let predicate = NSPredicate(format: "self = %@", [ClassB.self])
let predicate = NSPredicate(format: "SELF isKindOfClass: %@", [ClassB.self])

我认为这一定只是一个语法问题,但我正在寻找一个多小时来解决这个问题而没有结果。

提前致谢。

1 个答案:

答案 0 :(得分:0)

这应该有效:

let predicate = NSPredicate(format: "class = %@", ClassB.self)

以下是有关谓词的文档页面 - https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Predicates/Articles/pCreating.html#//apple_ref/doc/uid/TP40001793-CJBDBHCB