我正试图像这样使用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]
}
}
但是,我的User类不是NSObject的子类,因此它不符合Key Value。每当我尝试这个时,我都会得到unrecognized selector 'valueForKey'
。有没有一种方法可以创建自定义类Key Value Compliant而无需继承NSObject?或者也许是一种在不使用KVC的情况下使用NSPredicate的方法。
由于
答案 0 :(得分:2)
难道你不是为自己造成了不必要的困难吗?为什么不直接使用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)}
答案 1 :(得分:0)
您可以手动实施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
看到方法已实现。