不能使用类型为“Int”的索引下标“Set <string>”类型的值

时间:2016-11-08 11:35:55

标签: ios swift uitableview set

我有一组字符串,其中包含一些数据。 但是当我将数据从集合显示到tableView时,在cellForRowAtIndexPath方法中它给出了上述错误。 这是我的代码:

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
}

任何帮助都会很棒。谢谢!

3 个答案:

答案 0 :(得分: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
}

这种情况表明数据结构/算法不正确。

答案 1 :(得分:0)

您需要将Set转换为满足您要求的数组。 要将集合转换为数组,

var tradeSet: Set<String> = ["TKAI", "YNDX", "PSTG"]    
let stringArray = Array(tradeSet)

答案 2 :(得分:0)

您可以使用2种方式:

  1. Array(tradeSet)[indexPath.row]

  2. tradeSet.enumerated()。first {(index,value)in index == indexPath.row} !. element