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

Check if the integer value of a text field is valid in a switch statement [swift]

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

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

以上代码提示如下错误:

Expression pattern of type 'Bool' cannot match values of type '[UITextField]?'

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

使用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!")
    }

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

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

这首先防止了任何非法进入的发生。