NSPredicate 过滤数组的一部分

Posted

技术标签:

【中文标题】NSPredicate 过滤数组的一部分【英文标题】:NSPredicate filter part of array 【发布时间】:2015-06-10 05:34:43 【问题描述】:

我刚开始编码,我选择了 swift。我有一个 CoreData 数据库,我使用谓词来显示它的一部分。找到一个完整的表达式可以正常工作。 我能做些什么来搜索数据字段 Strasse.name 只是字符串的一部分,如“*way”。这是我的代码:

   let myFetschRequest = NSFetchRequest(entityName: "Strasse")
    var filter1 = "searchword"
    var filter2 = "searchword"
    let predicate1 = NSPredicate(format: "name = %@", filter1)
    let predicate2 = NSPredicate(format: "art = %@", filter2)
    var compound = NSCompoundPredicate.andPredicateWithSubpredicates([predicate1,predicate2])
    myFetschRequest.predicate = compound
    let sortDescriptor1 = NSSortDescriptor(key: "name", ascending: true)
    let sortDescriptor2 = NSSortDescriptor(key: "bereich", ascending: true)
    myFetschRequest.sortDescriptors = [sortDescriptor1,sortDescriptor2]
    daten = context!.executeFetchRequest(myFetschRequest, error: nil) as! [Strasse]
    tableView.reloadData()

【问题讨论】:

【参考方案1】:

大概是这样的:

let filter = "way"
let condition = [NSPredicate(format: "Strasse.name contains[cd] %@", filter]

刚刚谷歌搜索它真的很快。如果可以,稍后会测试它。

经过测试并且可以正常工作。

【讨论】:

我不得不写 "...format: "name ..." 而不是 "... Format: "Strasse.name ..." With "Filter)]" 最后它工作完美的。非常感谢。 当然,我的错。我只是快速阅读了您的描述并自动假设这是一个关系。好东西:)如果我们的回答回答了您的问题,请将我们中的任何一个标记为已回答:)【参考方案2】:

试试看。

var name = "way" let resultPredicate2 = NSPredicate(format: "Strasse.name BEGINSWITH[cs] %@",name)

此谓词过滤所有数据,即开始“路”。如果你只想要一个特定的字符串。然后使用下面给出的。

let resultPredicate2 = NSPredicate(format: "Strasse.name LIKE[cs] %@",name)

【讨论】:

我不得不写 "... format: "name ..." 而不是 "... format: "Strasse.name ..." 这很好用。谢谢

以上是关于NSPredicate 过滤数组的一部分的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 过滤数组的一部分

带有数组的 nsdictionary nspredicate 过滤

当字符串的一部分为空时,使用 NSPredicate 过滤字符串的 NSArray

NSPredicate 用于过滤数组

使用 NSPredicate 过滤包含字典的数组数组

使用 NSPredicate 过滤数组