我有UserDefaults数组为[[String:Any]] 如何在swift中从数组传递到tableView for index的行?
我通过了
if let loadedCart = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]] {
// print(loadedCart) // [[price: 19.99, qty: 1, name: A], [price: 4.99, qty: 2, name: B]]"
for item in loadedCart {
print(item["name"] as! String) // A, B
// print(item["price"] as! Double) // 19.99, 4.99
// print(item["qty"] as! Int)
// print(item["image"] as! Int) // 1, 2
cell.textLabel?.text = item["name"] as? String
cell.detailTextLabel?.text = item["price"] as? String
cell.idLbl.text = item["qty"] as? String
但这不起作用
答案 0 :(得分:0)
在类的顶层声明一个数据源数组
var loadedCart = [[String:Any]]()
在viewDidLoad
中加载UserDefaults
的数据并重新加载表格视图
loadedCart = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]] ?? []
tableView.reloadData()
在numberOfRows
返回
return loadedCart.count
在cellForRow
中从数组中获取项目并分配值
let item = loadedCart[indexPath.row]
cell.textLabel?.text = item["name"] as? String
cell.detailTextLabel?.text = item["price"] as? String
cell.idLbl.text = item["qty"] as? String
如果数组仅包含String
个值,则将数组声明为[[String:String]]
,并删除cellForRow
中的可选向下转换。但是强烈建议使用自定义结构或类而不是字典。