2017-08-13 67 views
1

任何想法如何在Swift 3中做到这一点?NSPredicate - 转换参数?

let number: NSArray = [123, 456, 678] 
let check = "1" 
let predicate = NSPredicate(format: "number.stringValue CONTAINS %@", check) 

number.filtered(using: predicate) 

问题是.stringValue。任何想法如何在不使用块谓词并且不使用标准过滤器函数的情况下完成此操作,而是使用上述谓词?

+0

你为什么在'Swift'中使用'NSArray'?您应该使用'Array '代替。 –

+0

我知道 - 只是编写这个例子,因为最初的问题是一个结果我从Realm那里回来,我需要使用标准的NSPredicate格式。我可以使用上面的Swift数组,并使用没有问题的过滤器。仍试图找出如何转换上述参数。 – Daniel

+0

*我可以使用上面的Swift数组,并使用没有问题的过滤器*。为什么你想创建一个问题? – vadian

回答

3

数组变量(这里:“数字”)的名称是不是数组元素的关键路径的一部分,所以它只是:

let number: NSArray = [123, 456, 678] 
let check = "6" 
let predicate = NSPredicate(format: "stringValue CONTAINS %@", check) 

print(number.filtered(using: predicate)) // [456, 678] 

或者与“自我”,如果你想更明确:

let predicate = NSPredicate(format: "SELF.stringValue CONTAINS %@", check) 

“自我” 关键字在Predicate Format String Syntax的 “谓词编程指南” 中解释说:

SELF
表示正在评估的对象。