Arrays 无法为类型为';[字符串:字符串]';索引类型为';Int';
我正在尝试将一个图像与菜单tableview的字符串相关联,但我一直遇到错误: 无法使用“Int”类型的索引为“[String:String]”类型的值下标` 代码: 在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:
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
字典不算作数组。字典中的项目总是随机排列的。因此,如果你想从字典中提取条目,你要么循环字典,要么按它的键获取每个条目。我并没有真正遵循你想要实现的目标。请你详细说明一下好吗?