我试图像这样使用NSPredicate:
let namePredicate = NSPredicate(format: "(username BEGINSWITH[c] $word)")
if prefix == "@" {
if countElements(word) > 0 {
suggestionDatasource.users = (suggestionDatasource.users as NSArray).filteredArrayUsingPredicate(namePredicate!.predicateWithSubstitutionVariables(["word" : word])) as [User]
}
}但是,我的用户类没有子类NSObject,因此它不符合键值。每当我尝试这个,我就会得到unrecognized selector 'valueForKey'。有没有一种方法可以使自定义类键值兼容而不对NSObject进行子类划分?或者是一种不用使用KVC就可以使用NSPredicate的方法。
谢谢
发布于 2014-12-30 02:58:57
你不觉得这对你自己来说太难了吗?为什么不直接使用Swift给你的东西-- filter、hasPrefix等等?我不知道用户到底是什么,但让我们假设它是这样的:
struct User {
let username : String = ""
}让我们假设users是这样的:
let users = [User(username:"Matt Neuburg"), User(username:"Dudley Doright")]那么,在Swift中,您似乎想要做的事情是微不足道的:
let word = "Matt"
let users2 = users.filter {$0.username.hasPrefix(word)}发布于 2017-05-30 06:57:34
您可以手动实现value(forKey key: String) -> Any?方法:
extension Model {
@objc func value(forKey key: String) -> Any? {
switch key {
case "id":
return id
// Other fields
default:
return nil
}
}
}注意该方法的@objc前缀:它很重要,因为它允许NSPredicate看到该方法已经实现。
https://stackoverflow.com/questions/27699013
复制相似问题