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



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

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

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

类型'bool'的表达模式无法匹配类型的值'[uitextfield]?'

trameTextfields是文本字段的数组。我确实研究了可能涉及的解决方案和关键字的解决方案,但无法正确实施。有任何建议吗?

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

如果您使用 guard let

更容易
guard let level = Int(characterTextFields[1].text!) else {
    validationErrorModal(text: "Level must be a number!")
    return
}
// Do something with your level

这是您可以实现它的方法:

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

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

这阻止任何非法进入首先发生。

最新更新