错误:&#34;无法下标类型&#39; [String:Array <string>]&#39;索引类型&#39; Int&#39;&#34;

时间:2015-11-18 05:20:30

标签: xcode swift

分配:&#34;创建一个显示加油站列表及其油价和距离的应用程序。将信息存储到词典中。在表格视图中显示结果。让用户选择一个条目,然后显示一个显示该条目的UIAlert对话框。&#34;

我正在写字典部分。字典的代码是

"var gasStation = ["76": ["$2.76", "1.2 miles"],
                   "Arco":["$2.56", "2.4 miles"],
                   "Shell":["$3.54", "3.5 miles"],
                   "Tower mart": ["$2.36", "5.7 miles"]]"

此代码行中会弹出错误

cell!.textLabel!.text = gasStation[indexPath.row]

以下是新更新的代码

import UIKit

class ViewController: UIViewController,UITableViewDataSource,     UITableViewDelegate {

let dwarves = [ "Sleepy", "Sneezy", "bashful", "Happy"]

let gasStation = ["76": ["$2.76", "1.2 miles"],
    "Arco":["$2.56", "2.4 miles"],
    "Shell":["$3.54", "3.5 miles"],
    "Tower-Mart": ["$2.36", "5.7 miles"]]

   var gasStationNames = Array(gasStation) // error: "ViewController.Type' does not have a member named 'gasStation'

let simpleTableIdentifier = "SimpleTableIdentifier"

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func tableView(tableView: UITableView,
    numberOfRowsInSection section: Int) -> Int {
    return dwarves.count
}
func tableView(tableView: UITableView,
    cellForRowAtIndexPath indexPath: NSIndexPath) ->UITableViewCell {

        var cell = tableView.dequeueReusableCellWithIdentifier(
        simpleTableIdentifier) as? UITableViewCell

        if (cell == nil) {
        cell = UITableViewCell(
        style: UITableViewCellStyle.Default, reuseIdentifier: simpleTableIdentifier)
    }
    cell!.textLabel?.text = dwarves[indexPath.row]
    return cell!
}

}

1 个答案:

答案 0 :(得分:1)

这就是你如何获得所有加油站名称的数组。

let gasStationNames = Array(gasStation.keys)

但它的顺序不一样。 并将其分配给tableView:

cell!.textLabel!.text = gasStationNames[indexPath.row]

在这里,您可以将gasStationNamesindexPath.row类型Int编入索引,因为它类型为Array。要从Dictionary中获取值,您应该传递一个正确类型的键。

您应该查看此document page

修改gasStationNames

中分配cellForRow
let gasStationNames = Array(gasStation.keys)

然后分配给单元格的textLabel

cell!.textLabel!.text = gasStationNames[indexPath.row]