Почему общее значение не обновляется при каждом переключении? Swift 4 - PullRequest
0 голосов
/ 10 апреля 2019

Я новичок в Swift, поэтому не уверен, что это возможно;но у меня есть некоторый код, где каждый тип пищи стоит значение в килограммах.Я использую кнопки приращения, чтобы выбрать, сколько из каждого типа пищи выбрано, и отображаю это число с помощью countLabel.Затем значение в килограммах добавляется к текущему итогу всех продуктов вместе взятых.Этот текущий итог делегирован другому классу / раскадровке.Я проверил, и моя делегация и счет работает.Но нынешний итог - нет.По существу, currentTotal остается в каждом типе случая, например, если я увеличиваю арбуз на 2, а арбуз составляет 10 кг каждый, то currentTotal составляет 20 кг.Если я переключаю типы (нажимаю кнопки приращения другого типа пищи), currentTotal начинается с 0 и выполняет currentTotal для этого типа, например, вода стоит 2 кг.Если я дважды нажму кнопку увеличения, то значение waterTally будет равно 2, а currentTotal будет отображаться как 4 кг.Если я переключаюсь обратно на арбуз, то currentTotal снова составляет 20 кг (поэтому currentTotal каждого типа является постоянным).Но я хочу, чтобы currentTotal равнялся сумме ВСЕХ типов вместе, а не был бы просто currentTotal каждого типа отдельно.Я попытался изменить currentTotal в каждом случае на тип total, т. Е. «WaterTotal», затем написал currentTotal = waterTotal + carrotTotal + watermelonTotal + avocadoTotal вне случаев (я добавил его внутри функции прямо над delegate?.showTotal(currentTotal), но результат был таким же, как указано выше. Разве это не так?Можно добавить значения различных случаев переключения или есть какой-то способ сделать это? Ниже приведен класс, на который я ссылаюсь, и класс объекта делегата. Спасибо

Apologies, I was asked to remove the code as it will be committed to a private repo.

1 Ответ

1 голос
/ 10 апреля 2019

Вы создаете новый вид для каждого типа

for type in incrementTypes {
        let nib = UINib(nibName: "WildlifeIncrementer", bundle: nil).instantiate(withOwner: self, options: nil)

Это означает, что каждый тип будет иметь свой собственный currentTotal, поэтому при вызове showTotal в значение currentTotal в WildlifeCalculatorViewController

включается только значение из последнего представления.

Теперь первым ответом будет изменение showTotal на

func showTotal(_ total: Int) {
    currentTotal += total
    totalLabel.text = ("\(currentTotal)kg")
}

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

Лучшее решение состоит в том, чтобы изменить дизайн вашей реализации класса представления и шаблона делегата. Хотите ли вы одно представление для каждого типа или одно представление для всех? Возможно, вам лучше использовать отдельный класс для хранения данных подсчета / веса и выполнения вычислений.

...