Swift – 动态生成NSPredicate?
发布时间:2020-12-14 04:52:37 所属栏目:百科 来源:网络整理
导读:我正在尝试动态创建谓词并执行提取. 值可以是String或Int,当将值和int值发送到NSPredicate初始化程序时,它会崩溃并出现以下错误: – [__ NSCFNumber rangeOfString:]:发送到实例的无法识别的选择器 我知道问题是Int的%@格式,但有没有办法使这个动态,所以
我正在尝试动态创建谓词并执行提取.
值可以是String或Int,当将值和int值发送到NSPredicate初始化程序时,它会崩溃并出现以下错误: – [__ NSCFNumber rangeOfString:]:发送到实例的无法识别的选择器 我知道问题是Int的%@格式,但有没有办法使这个动态,所以我不必手动检查String和Int然后创建谓词? var keyValues: [String: AnyObject] var predicates: [NSPredicate]() for (key,value) in keyValues { var predicate = NSPredicate(format: "%K = %@",key: [value]) predicates.append(predicate) } var compundPredicate = NSCompoundPredicate.andPredicateWithSubpredicates(predicates) 解决方法
作为NSObject的值可以解决问题:
var keyValues: [String: AnyObject] = ["name" : "John Doe","age" : 39] var predicates = [NSPredicate]() for (key,value) in keyValues { var predicate = NSPredicate(format: "%K = %@",key,value as NSObject) predicates.append(predicate) } var compundPredicate = NSCompoundPredicate.andPredicateWithSubpredicates(predicates) println(compundPredicate) 输出: name == "John Doe" AND age == 39 Swift 3/4更新: let keyValues = ["name" : "John Doe" as NSObject,"age" : 39 as NSObject] var predicates = [NSPredicate]() for (key,value) in keyValues { let predicate = NSPredicate(format: "%K = %@",value) predicates.append(predicate) } let compundPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: predicates) 或更短: let keyValues = ["name" : "John Doe" as NSObject,"age" : 39 as NSObject] let predicates = keyValues.map { NSPredicate(format: "%K = %@",$0.key,$0.value) } let compundPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: predicates) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |