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 年龄 == 39Swift 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 NSPredicate SUBQUERY with NOT IN?
swift : 使用 NSPredicate 过滤 NSMutableDictionary 的 NSMutableArray