Я пытаюсь сделать приложение, которое является очень простым. Одна часть приложения состоит в том, что есть 4 текстовых поля и кнопка, которая вычисляет сумму этих текстовых полей. Проблема, с которой я сталкиваюсь, заключается в том, что я набираю значение 10 в первом текстовом поле, а затем нажимаю кнопку. Результат будет 10. Однако, если я снова нажму его (не набрав ничего в других текстовых полях), результат будет равен 20 !! Кроме того, если я напечатаю 20 в одном из других текстовых полей, результат будет равен 40! Результат ДОЛЖЕН БЫТЬ 30 НЕ 40 !! Один из возможных вариантов, о которых я думал (еще не пробовал) назначает 0 всем текстовым полям при нажатии кнопки. Но я бы хотел, чтобы приложение было умнее и отслеживало результат.как игнорировать значение UITextField, которое уже было рассчитано в swift 3?
, если это поможет, вот код внутри кнопки, которая вычисляет сумму:
@IBAction func calBtnPressed(_ sender: UIButton) {
var benifit:[Double] = []
var textFields: [Double] = []
if initialBalance.text?.isEmpty ?? true {
// do nothing
} else {
if let temp = initialBalance.text {
// these lines of code will convert arabic numbers to English ones in case the user uses Arabic number
let initialStr: String = temp
let initialFormatter: NumberFormatter = NumberFormatter()
initialFormatter.locale = NSLocale(localeIdentifier: "EN") as Locale!
let initialFinal = initialFormatter.number(from: initialStr)
benifit.append(Double(initialFinal!))
}
}
if income.text?.isEmpty ?? true {
// do nothing
} else {
if let temp = income.text {
// these lines of code will convert Arabic numbers to English ones in case the user uses Arabic number
let incomeStr: String = temp
let incomeFormatter: NumberFormatter = NumberFormatter()
incomeFormatter.locale = NSLocale(localeIdentifier: "EN") as Locale!
let incomeFinal = incomeFormatter.number(from: incomeStr)
benifit.append(Double(incomeFinal!))
}
}
if salaries.text?.isEmpty ?? true {
// do nothing
} else {
if let temp = salaries.text {
let salariesStr: String = temp
let salariesFormatter: NumberFormatter = NumberFormatter()
salariesFormatter.locale = NSLocale(localeIdentifier: "EN") as Locale!
let salariesFinal = salariesFormatter.number(from: salariesStr)
textFields.append(Double(salariesFinal!))
}
}
if tools.text?.isEmpty ?? true {
// do nothing
} else {
if let temp = tools.text {
let toolsStr: String = temp
let toolsFormatter: NumberFormatter = NumberFormatter()
toolsFormatter.locale = NSLocale(localeIdentifier: "EN") as Locale!
let toolsFinal = toolsFormatter.number(from: toolsStr)
textFields.append(Double(toolsFinal!))
}
}
if maintinance.text?.isEmpty ?? true {
// do nothing
} else {
if let temp = maintinance.text {
let maintinanceStr: String = temp
let maintinanceFormatter: NumberFormatter = NumberFormatter()
maintinanceFormatter.locale = NSLocale(localeIdentifier: "EN") as Locale!
let maintinanceFinal = maintinanceFormatter.number(from: maintinanceStr)
textFields.append(Double(maintinanceFinal!))
}
}
if other.text?.isEmpty ?? true {
// do nothing
} else {
if let temp = other.text {
let otherStr: String = temp
let otherFormatter: NumberFormatter = NumberFormatter()
otherFormatter.locale = NSLocale(localeIdentifier: "EN") as Locale!
let otherFinal = otherFormatter.number(from: otherStr)
textFields.append(Double(otherFinal!))
}
}
for textField in textFields {
sumExpenses += textField
}
for ben in benifit{
sumBenifit += ben
}
totalExpenses.text = String(sumExpenses)
totalAfterSubtractingExpenses.text = String(sumBenifit - sumExpenses)
sumBenifit -= sumExpenses
}
Не по отношению к вашей проблеме, но вы, вероятно, должны использовать массивы для этого кода. Вы повторяете те же пять строк несколько раз, только для разных кнопок, и это делает ваш код более трудным для чтения, а не кратким. –
На самом деле, у вас уже есть массив textFields, так почему бы вам не использовать его? –
Спасибо за ваш комментарий, но я не совсем уверен, что понимаю вас. которые пять строк повторяю? это пять строк для перевода арабских цифр на английский? Я ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО ЛЮБЛЮ, ЧТОБЫ СДЕЛАТЬ МОЙ КОД, БОЛЬШЕ CONCISE – user2066392