我正在尝试动态创建谓词并执行提取.
值可以是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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。