2015-12-31 33 views

回答

1

我相信你在找什麼是一樣的東西:

var savings = Array<Saving>() 

,然後把它作爲

cell.name = savings[indexPath.row].name 

更新

,如果你有儲蓄Set。你可以得到陣列出它和使用它像這樣:

let savingsArray = Array(savings) 

,然後把它作爲

cell.name = savingsArray[indexPath.row].name 
+0

我把它作爲一個集合,這就是爲什麼我需要使用集合 – Reshad

+0

請看我更新的答案。 – Ismail

+0

請注意,如果您有一個動態更新的大集合,那麼對於此方法,每次您希望從其中訪問某些屬性時都會重複創建「集合」的「Array」表示的開銷模擬有序訪問)。我建議使用'Array'開始,或者找到其他方法。 – dfri

1

集的本質上是無序的,但UITableViewDataSource實現都必須有一個定義排序。您必須將該集轉換爲一個Array(其具有已定義的順序)並使用它來實現數據源方法。

1

我應該首先提到,也許Set不是您在這種情況下最適合您的收集類型,正如Bill提到的那樣--- Set本質上是無序的。


你可以,但是,通過匹配indexPath.row整數屬性整數id財產在你的Saving類/結構,利用Set方法.filter(...)的訪問Saving實例的name財產。

考慮下面的例子。我們首先創建一個Saving結構(或類,因爲據我瞭解,你有)符合HashableEquatable協議,纔有資格作爲集合類型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的成員有可疑的行爲「沒有這樣的節能標識」:你的表第視圖。

相關問題