我有一个包含不同类型信息的tableView,每个信息来自不同的数组。
我无法使用字典,因为那时列表会无序,我无法使用类,因为我有不同的列表,包含各种动态条目(属性总是不同等)。
这是我的问题: 我想实现一个搜索功能。但是当我对一个数组使用过滤函数时,它会根据实现的条件改变,但其他5个保持不变=>我无法重新加载tableView,因为数组信息不再匹配......
这里是数组:
var categoryItemUIDs = [String]()
var categoryItemDescriptions = [String]()
var categoryItemLfdNrs = [Int]()
var categoryGivenOuts = [Bool]()
var categoryGivenTos = [String]()
var categoryGivenAts = [String]()
var categoryStorageLocations = [String]()
在tableView(cellForRowAtIndexPath方法)中:
cell.customTextLabel?.text = categoryItemLfdNrs[indexPath.row]
cell.customDetailTextLabel.text = categoryItemDescriptions[indexPath.row]
这里是searchBar(textDidChange)方法:
self.categoryItemDescriptions.filter { $0.lowercased().contains(searchText.lowercased()) }
现在我得到一个缩小尺寸的阵列,但所有其他阵列保持不变......是否有其他方法可以避免这个问题?我已经尝试过类型别名,但它没有用完。
我将不胜感激任何帮助!
亲切的问候,
答案 0 :(得分:0)
当它进入如此大量的数组时,就会出现特定类型的时间。
简单的解决方案是创建类似
的东西struct Category {
var uid: String
var description: String
// ...
var storageLocation: String
}
你只有像
这样的东西var items: [Category]
你仍然可以在cellForRowAtIndexPath
cell.customTextLabel?.text = items[indexPath.row].lfdnrs
cell.customDetailTextLabel.text = items[indexPath.row].description
只有1个数组可以过滤
items.filter { $0.description.lowercased().contains(searchText.lowercased()) }
所以总体建议是解决不同的问题(这里我建议解决让你的数据在应用问题,而不是过滤多个数组有一个条件)< / p>
答案 1 :(得分:0)
尝试
var categoryItemUIDs = ["aaa","bbb","ccc"]
var categoryItemDescriptions = ["ddd","eee","fff"]
var categoryItemLfdNrs = [0,1,2]
struct data {
var id = ""
var desc = ""
var item = 0
init(id :String, desc:String, item:Int)
{
self.id = id
self.desc = desc
self.item = item
}
}
//var cat = [data]()
//for i in 0..<categoryItemUIDs.count {
// cat.append(data(id:categoryItemUIDs[i], desc:categoryItemDescriptions[i],item:categoryItemLfdNrs[i] ))
//}
//more swift
let cat = (0..<categoryItemUIDs.count).map { (i) -> data in
return data(id:categoryItemUIDs[i], desc:categoryItemDescriptions[i],item:categoryItemLfdNrs[i] )
}
print (cat)
let catFilter = cat.filter { $0.id == "aaa" }
print (catFilter)