+/- количество товаров в Cart View Controller с кнопками на TableViewCell, каждое из которых получает значение по умолчанию в виде целого числа из массива - PullRequest
0 голосов
/ 01 января 2019

Я разрабатываю приложение, в которое вы можете добавлять товары в корзину из MenuVC, затем вы можете перейти в CartVC, чтобы посмотреть, что находится в вашей корзине, и увеличить или уменьшить количество товаров, которые нужно заказать.Я не могу изменить количество меток, не знаю, так ли это, потому что я получаю количество из массива?это не меняется?

Спасибо за помощь1010 * и вот мой cellForRowAt @ CartVC

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView1.dequeueReusableCell(withIdentifier: "basketCell", for: indexPath) as! BasketCell

    cell.quantityLabel.text = String(items[2][indexPath.row] as! Int)

    cell.buttonIncrease = { (cell) in
        var quantity = self.items[2][indexPath.row] as! Int
        quantity += 1
        self.tableView1.reloadData()
    }
    cell.buttonDecrease = { (cell) in
        var quantity = self.items[2][indexPath.row] as! Int
        if quantity > 1 {
        quantity -= 1
        self.tableView1.reloadData()
        }
    }

    cell.itemLabel.text = items[0][indexPath.row] as? String
    cell.priceLabel.text = items[1][indexPath.row] as? String

    return cell
}

1 Ответ

0 голосов
/ 01 января 2019

не является ли оно неизменным?

Когда вы объявляете новую переменную путем уменьшения некоторого элемента из массива Any объектов, вы получаете копию этого элемента, которая не имеет ссылки на элемент из массива.


Для вашего случая было бы лучше, если у вас есть пользовательская модель

struct Item: Codable { // if you get this data from web service, you can use `JSONDecoder` to decode `Data` to `Item`/`[Item]`
    var title: String
    var price: String // better: `var price: Int` and then when you need to get text just add `" $"`
    var quantity: Int
}

, тогда вы можете иметь массив items в виде массива Item объектов

var items = [Item(title: "Cheeseburger", price: "10 $", quantity: 1), ...]

теперь вы можете получить определенный элемент из items в cellForRowAt как элемент из items с индексом, равным indexPath.row

let item = items[indexPath.row]
cell.quantityLabel.text = String(item.quantity)

И когда вам нужно изменить его количествосвойство

self.items[indexPath.row].quantity += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...