首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无NSObject KVC (NSPredicate)

无NSObject KVC (NSPredicate)
EN

Stack Overflow用户
提问于 2014-12-30 02:48:58
回答 2查看 401关注 0票数 1

我试图像这样使用NSPredicate:

代码语言:javascript
复制
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的方法。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-30 02:58:57

你不觉得这对你自己来说太难了吗?为什么不直接使用Swift给你的东西-- filterhasPrefix等等?我不知道用户到底是什么,但让我们假设它是这样的:

代码语言:javascript
复制
struct User {
    let username : String = ""
}

让我们假设users是这样的:

代码语言:javascript
复制
let users = [User(username:"Matt Neuburg"), User(username:"Dudley Doright")]

那么,在Swift中,您似乎想要做的事情是微不足道的:

代码语言:javascript
复制
let word = "Matt"
let users2 = users.filter {$0.username.hasPrefix(word)}
票数 2
EN

Stack Overflow用户

发布于 2017-05-30 06:57:34

您可以手动实现value(forKey key: String) -> Any?方法:

代码语言:javascript
复制
extension Model {
    @objc func value(forKey key: String) -> Any? {
        switch key {
        case "id":
            return id
        // Other fields
        default:
            return nil
        }
    }
}

注意该方法的@objc前缀:它很重要,因为它允许NSPredicate看到该方法已经实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27699013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档