无法为索引类型为“ Int”的“ [String:String]”下标

时间:2019-08-14 06:26:30

标签: arrays swift uitableview

除其他外,我试图将图像与用于菜单tableview的字符串相关联,但我不断收到错误消息:

  

不能用索引类型为“ Int”的下标“ [String:String]”

代码:

var menuItems:[String:String] = ["image1":"Order", "image2":"Notifications", "image3":"Free orders", "image4":"Payment", "image5":"Help", "image6":"Settings"]

cellForRow中:

cell.pageIcon.image = UIImage(named: menuItems[indexPath.row][0])
cell.pageName.text = menuItems[indexPath.row][1]

5 个答案:

答案 0 :(得分:0)

出现错误是因为您无法用不同于字典key类型(在您的情况下为String)的类型下标字典,这意味着您只能下标使用String值:

let pageName = menuItems["image1"] // This will return "Order"

我不确定您的确切用例是什么,但是我想这就是您要尝试的操作:-

1)排列图像名称和页面名称的数组:

let yourImageNamesArray = Array(menuItems.keys)
let yourPageNamesArray = Array(menuItems.values)

2)在您的cellForRow中:

cell.pageIcon.image = UIImage(named: yourImageNamesArray[indexPath.row])
cell.pageName.text = yourPageNamesArray[indexPath.row]

答案 1 :(得分:0)

menuItems是具有String键和String值的字典。

您必须仅使用String来访问其元素,如下所示:

let menuItem = menuItems["image\(indexPath.row)"]

答案 2 :(得分:0)

请勿混淆数组和字典!

这里您使用的是字典,这意味着可以使用元素的键访问元素。例如,menuItems["image1"]的值是“ Order”。

另一方面,数组元素可以通过其索引访问。

因此,在您的情况下,您应该使用数组,并使用其索引访问值,如下所示:

var menuItems: [String] = ["Order", "Notifications", "Free orders", "Payment", "Help", "Settings"]
cell.pageName.text = menuItems[indexPath.row]

答案 3 :(得分:0)

menuItems是字典,您需要使用

之类的键值进行访问
    cell.pageIcon.image = UIImage(named: menuItems["image\(indexPath.row)"])
    cell.pageName.text = menuItems["image\(indexPath.row)"]

您可以直接使用String数组,而不是使用字典

    var menuItems:[String] = ["Order", "Notifications", "Free orders", "Payment", "Help", "Settings"]

在表格视图单元格中,您可以按以下方式访问

   cell.pageIcon.image = UIImage(named: menuItems[indexPath.row])
   cell.pageName.text = menuItems[indexPath.row]

答案 4 :(得分:0)

在下面的代码中,

var menuItems:[String:String] = ["image1":"Order", "image2":"Notifications", "image3":"Free orders", "image4":"Payment", "image5":"Help", "image6":"Settings"]

menuItemsDictionary。由于它是dictionary,因此其中的项目将无序。因此,每当尝试基于indexPath从元素中获取元素时,每次都可能会得到不同的结果。

错误原因

此外,由于它是类型Dictionary的{​​{1}},因此您绝对不能使用[String:String]从中获取元素,即Int作为{{1} }。这就是导致错误的原因。

解决方案:

相反,您必须创建一个单独的类型-indexPath.row来存储单个subscript

class/struct

现在,menuItem struct MenuItem { let pageIcon: String let pageName: String } 的类型为menuItems

array

[MenuItem]将包含包含所需数据的var menuItems = [MenuItem]() menuItems.append(MenuItem(pageIcon: "image1", pageName: "Order")) menuItems.append(MenuItem(pageIcon: "image2", pageName: "Notifications")) menuItems.append(MenuItem(pageIcon: "image3", pageName: "Free orders")) menuItems.append(MenuItem(pageIcon: "image4", pageName: "Payment")) menuItems.append(MenuItem(pageIcon: "image5", pageName: "Help")) menuItems.append(MenuItem(pageIcon: "image6", pageName: "Settings")) 对象。将menuItems用作MenuItem中的menuItems

现在,在dataSource中,您可以像这样获得tableView

tableView(_: cellForRow:)