加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读