我一直在尝试检查文本字段的整数值是否有效,以涵盖更多可能的情况,而不是/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)
}
这阻止任何非法进入首先发生。