Ios Swift 3:使用NSPredicate(格式:)按类型/类筛选对象
我遇到了一个有关NSPredicate语法的问题。我想按对象的类类型过滤对象数组Ios Swift 3:使用NSPredicate(格式:)按类型/类筛选对象,ios,swift,swift3,nspredicate,Ios,Swift,Swift3,Nspredicate,我遇到了一个有关NSPredicate语法的问题。我想按对象的类类型过滤对象数组 class ClassA: NSObject {} class ClassB: ClassA {} class ClassC: ClassA {} let array: [ClassA] = [ClassB(), ClassC()] 现在,我想使用NSPredicate来获得一个只包含ClassB项的过滤数组 我可以用积木来做,它是这样的: let predicate = NSPredicate { (obje
class ClassA: NSObject {}
class ClassB: ClassA {}
class ClassC: ClassA {}
let array: [ClassA] = [ClassB(), ClassC()]
现在,我想使用NSPredicate来获得一个只包含ClassB项的过滤数组
我可以用积木来做,它是这样的:
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])
我想这一定是个语法问题,但我花了一个多小时来解决这个问题,却没有结果
提前感谢。这应该可以:
let predicate = NSPredicate(format: "class = %@", ClassB.self)
这是一个关于谓词的文档页面-为什么不使用本机Swift方式
数组。过滤器{$0是ClassB}
?可能与@vadian重复?我想创建更复杂和动态的复合谓词您也可以使用Swift函数来创建它。@Palle我尝试了让谓词=NSPredicate(格式:“class=%@,[ClassB.self])
没有结果。我想它不是复制品,因为我正在寻找swift 3的副本。谢谢你的回答。但是当我这样做时,我得到错误“参数类型'ClassB.type'不符合预期类型'CVarArg'”@stoikr您确定ClassA是从NSObject子类化的吗?在我的代码库中,它实际上是一个NSManagedObject,它是NSObject@stoikr尝试将显式强制转换添加到CVarArg-ClassB.self作为CVarArg。