我目前使用3個獨立的數組來填充一個分段的UITableView,我想只使用一個數組進行過濾,但仍然維護我的表內部分。將3個單獨的字典數組轉換爲1個結構數組?
數據由單個JSON字符串提供,然後我通過迭代創建單個「事件」的字典,然後基於「事件狀態」的值,將其添加到三個數組中的一個(打開,關閉並推遲)。這些數組然後用於填充UITableView的每個部分。
let myDictionary: [String: String] = [
"EventID" : item["EventID"] as! String,
"EventTitle" : item["EventTitle"] as! String,
"EventSummary" : item["EventSummary"] as! String,
"EventStatus" : item["Status"] as! String
]
if (item["Status"] as! String == "Open") {
self.openEvents.append(myDictionary as AnyObject)
}
if (item["Status"] as! String == "Closed") {
self.closedEvents.append(myDictionary as AnyObject)
}
if (item["Status"] as! String == "") {
self.deferredEvents.append(myDictionary as AnyObject)
}
然後在cellForRowAt:
var tmpDict: [String: String] = ["":""]
if sectionHeaders[indexPath.section] == "Open" {
tmpDict = openEvents[indexPath.row] as! [String : String]
}
if sectionHeaders[indexPath.section] == "Closed" {
tmpDict = closedEvents[indexPath.row] as! [String : String]
}
if sectionHeaders[indexPath.section] == "Deferred" {
tmpDict = deferredEvents[indexPath.row] as! [String : String]
}
問題是,在爲了使該數據的濾波,我不得不運行鍼對三個不同的陣列中的過濾器,這意味着三個不同的「過濾後的數據」陣列。這遠非理想。
我想要實現的是讓一個結構化數據(而不是字典)的單個數組,用戶可以過濾並將結果返回到單個「過濾數據」數組。我在其他地方做了很好的效果,但是,這是一個單一的列表,不是分段的。
我有一個結構設置和將項目添加到它如下所示:使用
let data = EventItem(EventID: item["EventID"] as! String, EventTitle: item["EventTitle"] as! String, EventSummary: item["EventSummary"] as! String, EventStatus: item["Status"] as! String)
self.eventList.append(data)
和過濾:
filteredData = eventList.filter() {
($0.EventTitle.lowercased() as NSString).contains(searchText.lowercased()) || ($0.EventSummary.lowercased() as NSString).contains(searchText.lowercased())
}
eventsTable.reloadData()
是否有可能分在在TableView中不同的部分這單個陣列?如果是這樣,怎麼樣?
你爲什麼不創建一個二維數組。外部數組保存每個部分的數組和內部數組保存每個部分中的項目?你可以在2D陣列上運行濾鏡 –