我想用我的如何使用一組類型的自定義對象作爲數據源
var savings = Set<Saving>()
爲數據源在我的UITableView。
因爲標僅僅是保存我不能使用類似
cell.name = savings[indexPath.row].name
。無論如何,有沒有辦法做到這一點?
我想用我的如何使用一組類型的自定義對象作爲數據源
var savings = Set<Saving>()
爲數據源在我的UITableView。
因爲標僅僅是保存我不能使用類似
cell.name = savings[indexPath.row].name
。無論如何,有沒有辦法做到這一點?
我相信你在找什麼是一樣的東西:
var savings = Array<Saving>()
,然後把它作爲
cell.name = savings[indexPath.row].name
更新
,如果你有儲蓄Set
。你可以得到陣列出它和使用它像這樣:
let savingsArray = Array(savings)
,然後把它作爲
cell.name = savingsArray[indexPath.row].name
集的本質上是無序的,但UITableViewDataSource實現都必須有一個定義排序。您必須將該集轉換爲一個Array(其具有已定義的順序)並使用它來實現數據源方法。
我應該首先提到,也許Set
不是您在這種情況下最適合您的收集類型,正如Bill提到的那樣--- Set
本質上是無序的。
你可以,但是,通過匹配indexPath.row
整數屬性整數id
財產在你的Saving
類/結構,利用Set
方法.filter(...)
的訪問Saving
實例的name
財產。
考慮下面的例子。我們首先創建一個Saving
結構(或類,因爲據我瞭解,你有)符合Hashable
和Equatable
協議,纔有資格作爲集合類型Set
的成員:
/* Saving: conform to Hashable and Equatable for use as
collection type Set members */
struct Saving : Hashable {
var id: Int
var name: String
/* Make Saving conform to Hashable */
var hashValue: Int {
return self.id
}
init(id: Int, name: String) {
self.id = id
self.name = name
}
}
/* Make Saving conform to Equtable */
func ==(lhs: Saving, rhs: Saving) -> Bool {
return lhs.id == rhs.id
}
現在,考慮訪問的下面的例子中,給定一個整數id的特定成員Set
(類型Saving
),例如如在表格視圖對應的行索引(indexPath.row
):或者
/* Example */
var savings = Set<Saving>()
savings.insert(Saving(id: 1, name: "Savings A"))
savings.insert(Saving(id: 2, name: "Savings B"))
savings.insert(Saving(id: 3, name: "Savings C"))
let indexPathRow = 1 // for our example
var cellName = savings.filter({ $0.id == indexPathRow }).first?.name ?? "No such Savings id"
print(cellName) // Savings A
,創建.name
通過.id
提取爲函數。
func getSavingsName(mySavingsSet: Set<Saving>, myId: Int) -> String {
return mySavingsSet.filter({ $0.id == myId }).first?.name ?? "No such Savings id"
}
/* for your specific example */
cell.name = getSavingsName(savings, myId: indexPath.row)
最好處理的情況下使用可選的返回代替,以避免陷入時(試圖)找出你的Set
對應的行ID的成員有可疑的行爲「沒有這樣的節能標識」:你的表第視圖。
我把它作爲一個集合,這就是爲什麼我需要使用集合 – Reshad
請看我更新的答案。 – Ismail
請注意,如果您有一個動態更新的大集合,那麼對於此方法,每次您希望從其中訪問某些屬性時都會重複創建「集合」的「Array」表示的開銷模擬有序訪問)。我建議使用'Array'開始,或者找到其他方法。 – dfri