swift 从数组 UserDefaults 到 tableView
swift from array UserDefaults to tableView
我有 UserDefaults 数组作为 [[String: Any]]
如何在 swift 中将行的 indexPath 从数组传递到 tableView?
我通过
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
但这不是行不通的
在 class
的顶层声明一个数据源数组
var loadedCart = [[String:Any]]()
在 viewDidLoad
中从 UserDefaults
加载数据并重新加载 table 视图
loadedCart = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]] ?? []
tableView.reloadData()
在numberOfRows
return
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
中的可选向下转换。但是,强烈建议使用自定义结构或 class 而不是字典。
我有 UserDefaults 数组作为 [[String: Any]] 如何在 swift 中将行的 indexPath 从数组传递到 tableView?
我通过
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
但这不是行不通的
在 class
的顶层声明一个数据源数组var loadedCart = [[String:Any]]()
在
viewDidLoad
中从UserDefaults
加载数据并重新加载 table 视图loadedCart = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]] ?? [] tableView.reloadData()
在
numberOfRows
returnreturn 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
中的可选向下转换。但是,强烈建议使用自定义结构或 class 而不是字典。