检查文本字段的整数值在switch语句[swift]中是否有效

时间:2019-02-22 14:45:27

标签: ios swift uitextfield

我一直在尝试检查文本字段的整数值在switch语句中是否有效以覆盖更多可能的情况,而不是使用长的if / elseif语句。

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

上面的代码提示以下错误:

  

“布尔”类型的表达模式不能与“ [UITextField]类型”的值匹配?

characterTextFields是文本字段的数组。我研究了可能的解决方案,其中涉及使用let和where关键字,但是无法正确实现。有什么建议吗?

4 个答案:

答案 0 :(得分:1)

您可以使用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       
}

答案 1 :(得分:0)

使用guard let会更容易:

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

// Do something with your level

答案 2 :(得分:0)

这是实现它的方法:

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

答案 3 :(得分:0)

最好在键入时进行验证。您应该实现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)
        }

这可以防止任何非法进入。