Swift - 动态生成 NSPredicate?

Posted

技术标签:

【中文标题】Swift - 动态生成 NSPredicate?【英文标题】:Swift - Dynamically generate NSPredicate? 【发布时间】:2014-09-01 21:20:39 【问题描述】:

我正在尝试动态创建谓词并执行提取。

值可以是 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)

【问题讨论】:

【参考方案1】:

value as 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)

输出:

姓名 == "John Doe" AND 年龄 == 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 = %@", key, 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)

【讨论】:

你无处不在 :) 感谢您的回答,会试一试 只是为了更新代码。 NSCompoundPredicate 在 swift 2 中改变,你现在必须使用初始化器 NSCompoundPredicate(andPredicateWithSubpredicates: predicates)

以上是关于Swift - 动态生成 NSPredicate?的主要内容,如果未能解决你的问题,请参考以下文章

在 NSPredicate 中绑定 var - SwiftUI

swift 3 迁移后 NSPredicate 崩溃

swift - NSPREDICATE 失败 [重复]

Swift3 中的 NSPredicate

Swift NSPredicate SUBQUERY with NOT IN?

swift : 使用 NSPredicate 过滤 NSMutableDictionary 的 NSMutableArray