从数组UserDefaults到tableView

时间:2018-04-23 16:23:46

标签: ios swift uitableview nsuserdefaults

我有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

但这不起作用

1 个答案:

答案 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中的可选向下转换。但是强烈建议使用自定义结构或类而不是字典。