#swift
#swift
Вопрос:
Я только начинаю работать в Swift и хотел создать калькулятор чаевых. Но я столкнулся с некоторыми проблемами и надеялся, что кто-нибудь сможет указать мне правильное направление. В getBillAmt
функции мой итог не обновляется / не отображается, он отображает только billAmt
я пробовал несколько разных вариантов, чтобы обновить итоговое значение, но не могу его получить. Моя последняя попытка приведена ниже.
В моих предыдущих попытках мои проблемы заключались в невозможности преобразовать Int в Float.
Переменные,
var tipPercentAmt = Int()
var billAmt = Float() //bill before tip
var total = Float()
Ползунок, с помощью которого пользователь может перейти к сумме чаевых (в виде int)
@IBAction func tipAmtVal(sender: UISlider) {
let tipPercentAmt = Int(sender.value)
}
И, получая сумму счета от пользователя из текстового поля (в виде числа с плавающей точкой), а затем добавляя к нему чаевые, чтобы отобразить общую сумму в виде метки
@IBAction func getBillAmt(sender: UITextField) {
let billAmt = Float(billAmtText.text!)
let total = billAmt! (Float(tipPercentAmt / 100)
tipAmtLabel.text = "(total)"
}
//cause labels to update when user hits return
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
Комментарии:
1. Что должно запускать вашу
getBillAmt
функцию?2. Кстати, вам нужно остановиться и узнать о вариантах Swift. Все те
!
, которые вы используете, просто приведут к сбою вашего приложения.3. Когда пользователь нажимает кнопку возврата, извините, забыл добавить к вопросу.
4. Вы не используете sender в функции getBillAmt, а также в этой функции, если billAmt является согласной (let), вам не нужно ! когда вы делаете «пусть total = billAmt!»
Ответ №1:
Ничего не настроено для фактического вызова вашей getBillAmt
функции. Предполагая, что ваше текстовое поле настроено правильно с его делегатом, textFieldShouldReturn
функция будет вызвана, и все.
Вам нужно позвонить getBillAmount
оттуда.
func getBillAmt(textField: UITextField) {
if let text = textField.text {
if let billAmt = Float(text) {
let total = billAmt (Float(tipPercentAmt / 100)
tipAmtLabel.text = "(total)"
}
}
}
//cause labels to update when user hits return
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
getBillAmt(textField: textField)
return false
}
Как вы можете видеть, я также внес некоторые другие исправления.
Комментарии:
1. В строке
let total = billAmt
, я получаю ошибку, Значение необязательного типа Float? не развернут; вы хотели использовать! или ?, это та же ошибка, которую я получал ранее.2. Упс. Нужен 2-й
if
, поскольку преобразование из string в float может завершиться неудачей, если текст на самом деле не содержит допустимого числа. Смотрите мои обновления.3. О! Хорошо! Спасибо!