我一直在尝试检查文本字段的整数值在switch语句中是否有效以覆盖更多可能的情况,而不是使用长的if / elseif语句。
switch characterTextFields {
case Int(characterTextFields[1].text!) == nil:
validationErrorModal(text: "Level must be a number!")
}
上面的代码提示以下错误:
“布尔”类型的表达模式不能与“ [UITextField]类型”的值匹配?
characterTextFields是文本字段的数组。我研究了可能的解决方案,其中涉及使用let和where关键字,但是无法正确实现。有什么建议吗?
答案 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)
}
这可以防止任何非法进入。