Arrays 无法为类型为';[字符串:字符串]';索引类型为';Int';

Arrays 无法为类型为';[字符串:字符串]';索引类型为';Int';,arrays,swift,uitableview,Arrays,Swift,Uitableview,我正在尝试将一个图像与菜单tableview的字符串相关联,但我一直遇到错误: 无法使用“Int”类型的索引为“[String:String]”类型的值下标` 代码: 在cellForRow中: cell.pageIcon.image = UIImage(named: menuItems[indexPath.row][0]) cell.pageName.text = menuItems[indexPath.row][1] cell.pageIcon.image = UIImage(named:

我正在尝试将一个图像与菜单tableview的字符串相关联,但我一直遇到错误:

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

代码:

cellForRow
中:

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

出现错误的原因是,无法使用与字典的
类型不同的类型为字典下标,在您的情况下,该类型是
字符串
,这意味着您只能使用
字符串
值下标:

let pageName = menuItems["image1"] // This will return "Order"
我不确定您的确切用例是什么,但我认为这就是您试图做的:-

1) 创建图像名称和页面名称的数组:

let yourImageNamesArray = Array(menuItems.keys)
let yourPageNamesArray = Array(menuItems.values)
2) 在您的
单元格FORROW

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

menuItems
是一个包含
String
键和
String
值的字典

您必须仅使用
字符串访问其元素,如下所示:


让menuItem=menuItems[“image\(indexPath.row)”]
不要混淆数组和字典

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

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

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

var menuItems:[String]=[“订单”、“通知”、“免费订单”、“付款”、“帮助”、“设置”]
cell.pageName.text=menuItems[indexPath.row]

菜单项是您需要使用键值访问的字典,如

    cell.pageIcon.image = UIImage(named: menuItems["image\(indexPath.row)"])
    cell.pageName.text = menuItems["image\(indexPath.row)"]
您可以直接使用字符串数组,而不是使用字典,如

    var menuItems:[String] = ["Order", "Notifications", "Free orders", "Payment", "Help", "Settings"]
在tableview单元格中,您可以像

   cell.pageIcon.image = UIImage(named: menuItems[indexPath.row])
   cell.pageName.text = menuItems[indexPath.row]
在下面的代码中

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

menuItems
是一个
字典
。由于它是一本
词典
,因此其中的项目将无序。因此,无论何时尝试基于
indepath
从中获取元素,每次都可能得到不同的结果

错误原因

此外,由于它是
[String:String]
类型的
字典,因此使用
Int
绝对无法从中获取元素,即
indexPath.row
作为
下标。这就是你出错的原因

解决方案:

相反,您必须创建一个单独的类型-
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
作为
tableView
dataSource

现在,在
tableView(uquo:cellForRow:)
中,您可以获得
menuItem
如下所示:

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

字典不算作数组。字典中的项目总是随机排列的。因此,如果你想从字典中提取条目,你要么循环字典,要么按它的键获取每个条目。我并没有真正遵循你想要实现的目标。请你详细说明一下好吗?