Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift 3:使用NSPredicate(格式:)按类型/类筛选对象_Ios_Swift_Swift3_Nspredicate - Fatal编程技术网

Ios Swift 3:使用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

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

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。