我如何更新我的字典 ios Swift 中的数量值

Posted

技术标签:

【中文标题】我如何更新我的字典 ios Swift 中的数量值【英文标题】:how can i update the quantity values in my dictionary ios Swift 【发布时间】:2018-05-18 06:17:49 【问题描述】:

我的应用程序中有一个对象数组,它传递给另一个名为 restaurantViewController 的 VC,该值存储在 restMenu 中,现在的问题是,每当我滚动 UITableView 时,ItemQuantityCell 值总是被重用为 0,这是默认值在我的 restMenu 中,我如何更新我的 restMenu 中的值,以便我可以将它传递给 checkoutVC,并为我的 ItemQuantityCell 提供正确的值。 我的数据来自哪里的 plist 如下

这是我的代码

var restMenu = [[String:Any]]()

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! RestaurantItemViewCell

    cell.delegate = self as? TableViewCellDelegate

    cell.selectionStyle = UITableViewCellSelectionStyle.none

    //assign item name to cell
    let selectedDictName = restMenu[indexPath.row] as NSDictionary
    print("the selected dict ", selectedDictName)
    cell.itemNameLabel.text = selectedDictName.value(forKey: "ItemName") as? String

    // assign item price to cell
    let selectedDictPrice = restMenu[indexPath.row] as NSDictionary
    cell.itemPriceLabel.text = "Price: \(selectedDictPrice.value(forKey: "ItemPrice") as! String)"

    // assign item quantity to cell
    let selectedDictQuant = restMenu[indexPath.row] as NSDictionary
    cell.itemQuantityLabel.text = selectedDictQuant.value(forKey: "ItemQuant") as? String


【问题讨论】:

你为什么在 Swift 中使用NSDictionary?您在哪里尝试更新数量?您应该首先将 JSON 解析为正确的 structclass,而不是简单地使用 [String:Any]。看Codable 我是新手,有人建议我,但现在我已经按照 PPL 的建议更新了我的代码 【参考方案1】:

根据您的 plist,ItemQuant 始终为零,并且您在 cell.itemQuantityLabel.text 中分配了相同的值,因此它始终为零。

接下来,请修改你的代码,不要在 Swift 中使用 NSStuff

更新您的cellForRowAt indexPath,如下所示

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! RestaurantItemViewCell
    cell.delegate = self as? TableViewCellDelegate
    cell.selectionStyle = UITableViewCellSelectionStyle.none

    //assign item name to cell
    let dict = restMenu[indexPath.row]
    print("the selected dict ", dict)

    cell.itemNameLabel.text = dict["ItemName"] as! String
    cell.itemPriceLabel.text = dict["ItemPrice"] as! String
    cell.itemQuantityLabel.text = dict["ItemQuant"] as! String

    return cell

希望这对你有用。

仅供参考。以上代码未经测试。仅供参考。

注意 无论您想在哪里更新商品数量 获取要更新数量的索引并执行以下操作

restMenu[index]["ItemQuant"] = "2" // index is you will get somehow & 2 is just for example you can do what you want there.

更新

根据您上次的评论,这是建议。

创建适当的模型类并解析 plist,而不是字典结构,您的 cellForRowAt indexPath 将被更改,您的 ItemQuant 必须是 Int 值。将restMenu 对象传递给其他ViewController 并更新其ItemQuant。如果您向后导航,只需重新加载您的 tableview 数据。它会显示 ItemQuant 的变化。

【讨论】:

代码运行正常但问题依然存在 不,它仍然在做和以前一样的事情。当我滚动 UITableView 时,这些值重用了默认值,我在想,当我在 Quantity 中增加减量时,是否可以用新值替换以前的 ItemQuant 的值。但我无法做到这一点 不,它仍然在做和以前一样的事情。当我滚动 UITableView 时,这些值重用了默认值,我在想,当我在 Quantity 中增加减量时,是否可以用新值替换以前的 ItemQuant 的值。但我无法做到这一点 它将使用默认值,因为您正在像这样分配它, cell.itemQuantityLabel.text = dict["ItemQuant"] as!字符串,它是从字典本身获取值,你应该相应地更新这一行来更新标签值 我怎么能这样做,我正在搜索一个小时,但仍然一无所获。

以上是关于我如何更新我的字典 ios Swift 中的数量值的主要内容,如果未能解决你的问题,请参考以下文章

在iOS9 swift中的字典类型中添加数组作为键和值

设置 UITabBarItem 徽章

如何使用swift获取字典中的索引值

如何制作包含特定值的 Swift 字典?

将字典值作为空值传递给 alamofire 服务 ios swift

观察调用不更新字典值。异步的问题