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()
    
  • numberOfRowsreturn

    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 而不是字典。