Калькулятор чаевых — Swift

#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. О! Хорошо! Спасибо!