我有两个模型如下:
class Topic : NSObject {
var subTopics : [SubTopic]!
var topicId : Int!
var topicName : String!
class SubTopic : NSObject {
var subTopicDesc : String!
var subTopicDescText : String!
var subTopicId : Int!
var subTopicName : String!
}
以及在我的viewcontroller中定义的主题数组:
var rightsDataArray: [Topic] = []
以下是我的搜索逻辑:
let pred = NSPredicate(format: "topicName CONTAINS %@ OR SUBQUERY(subTopics, $SubTopics, $SubTopics.subTopicDescText CONTAINS %@).@count > 0 OR SUBQUERY(subTopics, $SubTopics, $SubTopics.subTopicName CONTAINS %@).@count > 0",searchBar.text!,searchBar.text!,searchBar.text!)
let filteredArray = (self.rightsDataArray as NSArray).filtered(using: pred)
如果搜索字符串为“运行状况”,则返回以下结果:
如果searchedText存在于子主题[0]中,则我要从结果的子主题数组中删除子主题[1]、子主题[2]、子主题[3],并且只检索子主题[0]。
最佳答案
您正在筛选顶级Topic
数组,代码中的任何内容都不会触及子主题数组。谓词根据子主题决定是否向筛选数组添加特定的Topic
(顶级对象)。但一旦一个主题符合条件(即至少有一个子主题包含搜索词),就会添加Topic
。
似乎要修改Topic
的subTopics
数组以包含较少的对象。为此,您必须遍历每个Topic
并修改它的subTopics
属性。
关于ios - NSPredicate(Swift):子查询不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42693684/