Проверьте, является ли целочисленное значение текстового поля допустимым в операторе switch [swift] - PullRequest
0 голосов
/ 22 февраля 2019

Я пытался проверить, является ли целочисленное значение текстового поля допустимым в операторе switch, чтобы охватить больше возможных случаев, а не длинные операторы if / elseif.

switch characterTextFields {
case Int(characterTextFields[1].text!) == nil:
    validationErrorModal(text: "Level must be a number!")
}

Код выше подсказываетследующая ошибка:

Шаблон выражения типа 'Bool' не может соответствовать значениям типа '[UITextField]?'

characterTextFields - это массив текстовых полей.Я исследовал возможные решения, в которых использовались ключевые слова let и where, но не смог правильно их реализовать.Есть предложения?

Ответы [ 4 ]

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

Было бы лучше проверить, как они вводят.Вы должны реализовать UITextFieldDelegate.И затем реализуйте это в вашем делегате:

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
          //Check for illegal characters
          return (string.rangeOfCharacter(from: CharacterSet(charactersIn: "0123456789").inverted) == nil)
        }

Это предотвращает любой незаконный вход в первую очередь.

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

Вот как вы можете достичь этого:

switch Int(characterTextFields[1].text!) {
    case nil:
        validationErrorModal(text: "Level must be a number!")
    default:
        validationErrorModal(text: "Level is a number!")
    }
0 голосов
/ 22 февраля 2019

Вы можете использовать switch для этого, но вам нужно переключить этот номер, а не на поле ввода:

switch Int(characterTextFields[1].text!) {
    case nil:
        validationErrorModal(text: "Level must be a number!")
    case 0?:  // switch over optional value
        break
}

Обычно проще сначала обработать необязательный, например:

guard let level = Int(characterTextFields[1].text!) else {
    validationErrorModal(text: "Level must be a number!")
    return
}

и затем переключите необязательное значение:

switch level {
   case 0:
     break
   default:
     break       
}
0 голосов
/ 22 февраля 2019

Это проще, если вы используете guard let:

guard let level = Int(characterTextFields[1].text!) else {
    validationErrorModal(text: "Level must be a number!")
    return
}

// Do something with your level
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...