Как я могу извлечь и рассчитать цену для массива объектов, которые имеют цену свойства - PullRequest
0 голосов
/ 30 июня 2018

У меня есть массив объектов, и у каждого объекта есть свойство Price. То, что я хочу, это извлечь цену для каждого объекта, а затем сделать сумму этих цен и в конце показать TotalPrice в метке. На данный момент мой набор цен сходит с ума, и я не знаю почему.

Это мой код на данный момент:

 class CartViewController: UIViewController {
        var productsInCartArray = [Product]()
        var productPricesArray = [Float]()

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = cartTableView.dequeueReusableCell(withIdentifier: Constants.identifierCartTotalPriceCell, for: indexPath) as! CartTableViewCell

            var totalSum: Float = 0

            for eachProduct in productsInCartArray{
                productPricesArray.append(eachProduct.price)
                totalSum = productPricesArray.reduce(0, +)

                cell.cartTotalPriceLabel.text = String(totalSum)

                return cell
            }
        }
 }

А вот и скриншот:

enter image description here

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Проблема с частью productPricesArray.append(eachProduct.price) в cellForRow. Ну, cellForRow будет вызываться несколько раз. Вы не должны помещать такую ​​логику в cellForRow, это плохая идея.

Что вы должны сделать, это рассчитать цену, прежде чем позвонить reloadData. Например, если вы добавляете товар в массив productsInCart, вы также должны добавить цену товара в массив productPrices. Таким образом, в cellForRow вы будете суммировать только массив, который в порядке.

0 голосов
/ 30 июня 2018

productPricesArray - это переменная экземпляра, а не локальная переменная, поэтому вы добавляете элемент в productPricesArray каждый раз, когда генерируете ячейку; если у вас есть две ячейки, у вас будет 4 цены в этом массиве. Кроме того, каждый раз, когда вы перезагружаетеData () для этой таблицы, она добавляет к этому массиву дополнительные цены.

Вы должны извлечь эту логику из этого метода и вместо этого запустить ее до вызова reloadData для таблицы (или некоторого другого времени загрузки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...