tableView.reloadData() 之后,通用函数不会更新 tableview 单元格中标签的值

Generic function does not update the value of label in tableview cell after tableView.reloadData()

我有一个函数,我在其中递增标签的值,如下所示

@IBAction func buttonClicked(_ sender: UIButton) {
        let indexPath = indexPath(sender: sender, tableView: profileTableView)

        array[Int((indexPath.row))].likes = String(Int(array[Int((indexPath.row))].likes)!+1)
        self.userProfileTableView.reloadData()
    } 

在上面的函数中,标签的 reloadData 值递增到下一个数字后,但是当我在如下扩展中将其设为通用函数时,标签的值不会递增

func buttonClicked(data:String,tableView:UITableView) {
        let data = String(Int(data)!+1)
        print("Incremented data", data)
        tableView.reloadData()
    }

我按如下方式调用函数,但标签没有更新为增量值。它保留旧值。

buttonClicked(data: feeds[Int((indexPath.row))].likes, tableView: userProfileTableView)

如有任何帮助,我们将不胜感激。谢谢。

你应该把代码改成这样。

let numLikes = Int(feeds[Int((indexPath.row))].likes)!
feeds[Int((indexPath.row)).likes = String(numLikes)

因为String是值类型

当你这样做的时候。

buttonClicked(data: feeds[Int((indexPath.row))].likes, tableView: userProfileTableView)

func buttonClicked(data:String,tableView:UITableView) {
    let data = String(Int(data)!+1)
    print("Incremented data", data)
    tableView.reloadData()
}

1) func buttonClicked 中的新值变量 data 将被创建并具有值 = feeds[Int((indexPath.row))].likes

2) 当您更改 data 时,它只会更改 data 而不会更改 feeds[Int((indexPath.row))].likes

查看 Value and Reference Type 了解更多信息。

实际上您没有在通用方法中使用更新后的值更新数组对象。

您可能必须更新数组中递增的值,或者将您的数组发送到具有选定索引的通用函数。

示例:

func buttonClicked(feeds:[Feed], index:Int, tableView:UITableView) {

        feeds[index].likes = String(Int(feeds[index].likes)!+1)
        tableView.reloadData()
    }

但我不会说这是泛型函数,因为它用最少的代码用于最少的地方,并且没有泛型类型可供重用。

谢谢!