【发布时间】:2017-12-08 03:35:02
【问题描述】:
我遇到了一个关于 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(format:) 做同样的事情。
在其他尝试中,我尝试了以下失败:
let predicate = NSPredicate(format: "self = %@", [ClassB.self])
let predicate = NSPredicate(format: "SELF isKindOfClass: %@", [ClassB.self])
我认为这一定只是一个语法问题,但我正在寻找一个多小时来解决这个问题。
提前致谢。
【问题讨论】:
-
为什么不用原生的Swift方式
array.filter{ $0 is ClassB }? -
@vadian 我想创建更复杂和动态的复合谓词
-
你也可以使用 Swift 函数来做到这一点。
-
@Palle 我试过
let predicate = NSPredicate(format: "class == %@", [ClassB.self])没有结果。我认为它不是重复的,因为我正在寻找 swift 3 对应物。
标签: ios swift swift3 nspredicate