我正在尝试从搜索栏中根据文本(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")
答案 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