根据搜索文本

时间:2018-04-22 09:48:02

标签: arrays swift core-data filter

我正在尝试从搜索栏中根据文本(mySearchText)过滤项目。到目前为止我有:

items = try context.fetch(Item.fetchRequest())
filtered data = items.filter { ($0.myArray?.contains(mySearchText))!}

如果我输入全文,例如如果我进入"你好"进入搜索栏,它将在myArray中使用Hello过滤项目。

但是如果我只是输入" Hel"它不会过滤同一个项目。即使只使用部分搜索词,我如何过滤项目?

我希望filteredData成为包含字符串的数组的项目

var filteredData: [Item] = []

e.g。如果

项目1.myArray = [" cat"," dog"," monkey"]和

项目2.myArray = ["马","斑马","牛"]

mySearchText =" o"

我想filterData为item1和item2(项目1中的牛和项目2中的狗都包含" o")

2 个答案:

答案 0 :(得分:1)

您在数组上调用 contains(),这意味着您没有进行字符串匹配,而是查找与mySearchText对象相等的对象,因此您查找对象等于“Hello”或该阵列中的“Hel”。

要进行字符串匹配,您需要过滤掉一个级别。这是我的版本,我假设myArray是一个字符串数组

items = try context.fetch(Item.fetchRequest())
var filteredData = [Item]()
for item in items {
   if item.myArray?.filter({$0.contains(mySearchText)}).count > 0 {
     filteredData.append(item)
   }
}

答案 1 :(得分:0)

当我使用下面的代码时,它的工作正常,也许你应该使用字符串来基于它进行过滤。

    var mySearchText = "a"
    var items = ["Adam", "Ahmad", "abdalla", "abcd", "efj", "hijk"]
    let filtereddata = items.filter { ($0.lowercased().contains(mySearchText))}

    print(filtereddata.count)  // 4