Используя Uitextfield для пользовательского ввода, пытаясь преобразовать в int, если не int, то вернуть 0 - PullRequest
0 голосов
/ 06 февраля 2019

Я создаю тренировочное приложение для добавления пользовательских входов в приложение.У меня есть несколько пользовательских значений по умолчанию из поля UIText, но когда я запускаю свою функцию, она не работает, когда я пропускаю ввод, потому что он не распознает пустое текстовое поле как целое число.Я пытаюсь создать оператор if, который, если = "", затем возвращает INT (0), иначе INT (пользовательское значение по умолчанию).

@IBAction func saveButton(_ sender: Any) {
    UserDefaults.standard.set(hole1.text, forKey: "hole1enter")}

@IBAction func Total(_ sender: Any) {
     let h1:String = hole1.text! {
         if h1 == " " {
           print(0)
         } else {
             print(Int(h1))
         }
  }

Я пробовал несколько попыток, но продолжаю получать ошибки,Я только начинаю с Swift.У всех вас есть какая-нибудь хорошая литература о том, как лучше понять преобразование строк, текста, целых или самих функций?В конце я хочу иметь возможность суммировать все пользовательские значения по умолчанию

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Не все String s могут быть представлены как Int, поэтому вам нужно проверить, возвращает ли возвращаемое значение неисправного Int инициализатора nil или нет.Вы можете просто указать значение по умолчанию, равное 0.

Вы можете безопасно принудительно развернуть свойство UITextField s text, поскольку задокументировано, что оно всегда не равно нулю.

@IBAction func total(_ sender: Any) {
    let intValue = Int(hole1.text!) ?? 0
    print(intValue)
}

Вам также следует соблюдать соглашение об именах Swift, которое является lowerCamelCase для имен функций и переменных (total).

0 голосов
/ 06 февраля 2019

Первая проблема: вы должны проверить, является ли свойство text пустым String, поэтому вам нужно использовать "", а не строку с пробелами if h1 == " " (вы также можете использовать предназначенное isEmptyсвойство, которое возвращает true, если строка "").

Далее, преобразование из String в Int может завершиться неудачей, поэтому оно возвращает необязательно.Вы можете использовать необязательную привязку или установить значение по умолчанию для безопасного назначения значения из значения, возвращенного при инициализации

@IBAction func Total(_ sender: Any) {

    let h1 = hole1.text!

    if h1.isEmpty {
        print(0)
    } else {
        let int = Int(h1) ?? 0
        print(int)
    }
}

, которое можно сократить только до этого

@IBAction func Total(_ sender: Any) {
    let int = Int(hole1.text!) ?? 0
    print(int)
}

, поскольку, если text являетсяпустая строка, Int не может быть построена


Последняя проблема, которую я вижу, заключается в том, что вы сохраняете необязательный String? в UserDefaults.Не делайте этого, смело делайте принудительную распаковку, используя восклицательный знак, поскольку text свойство UITextField никогда не nil

@IBAction func saveButton(_ sender: Any) {
    UserDefaults.standard.set(hole1.text!, forKey: "hole1enter")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...