除其他外,我试图将图像与用于菜单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]
答案 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"]
menuItems
是Dictionary
。由于它是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:)