2016-11-08 4 views
1

データが入っている文字列セットがあります。 しかし、セットからtableViewにデータを表示していたとき、cellForRowAtIndexPathメソッドでは、上記のエラーが表示されます。すべてのヘルプは素晴らしいことだ'Set <String>'タイプの値に 'Int'タイプのインデックスを付けることはできません。

var tradeSet: Set<String> = ["TKAI", "YNDX", "PSTG"] 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("MyTrade", forIndexPath: indexPath) as! MyTradeTableViewCell 

    let objects = tradeSet[indexPath.row] 
    cell.tradeName.text = objects 

    return cell 
} 

: はここに私のコードです。ありがとうございました!

+4

'Set'は順不同コレクション型であり、インデックスによって添字することができない、アレイにセットを変換します。 – vadian

+1

セットを配列に変換する必要があります。 –

+1

@vadian Well *技術的には、 'IntIn'ではなく' SetIndex'だけでインデックスに添字を付けることができます;) – Hamish

答えて

1

セットの要素がリストされている順序は関係がないため、セットはインデックス可能ではありません。要素を配列または別のデータ構造体に格納する必要があります。

var tradeSet: Set<String> = ["TKAI", "YNDX", "PSTG"] 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("MyTrade", forIndexPath: indexPath) as! MyTradeTableViewCell 

    // This is not the best data structure for this job tho 
    for (index, element) in tradeSet.enumerated() { 
     if row == index { 
      cell.tradeName.text = element 
     } 
    } 

    return cell 
} 

これらのシナリオでは、誤ったデータ構造/アルゴリズムが示唆されています(推奨されません)。

+3

で添え字を付けることはできません。* "順序がないのでセットはインデックスできません" * - それは間違っているか、少なくとも誤解を招く。 'Set'はコレクションであり、各要素はインデックスを持ち、添え字を付けることができます。セット内の要素の順序は未定* –

+0

@MartinR Edited。ありがとう。 – Sealos

0

要件の配列にセットを変換する必要があります。

var tradeSet: Set<String> = ["TKAI", "YNDX", "PSTG"]  
let stringArray = Array(tradeSet) 
関連する問題