ios - 如何让textField验证代码更加紧凑和可读?

标签 ios swift uitextfield

我正在编写文本字段验证代码。文本字段不允许用户输入 16..<80 以外的年龄。我写了下面的代码,我觉得它的质量很差。您关于使下面的代码更具可读性的建议将非常有帮助。

设置:

创建文本字段并委托(delegate)给 self。

extension UserProfileViewController: UITextFieldDelegate {
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let numberFiltered = string.components(separatedBy: NSCharacterSet(charactersIn: "0123456789").inverted).joined(separator: "")

        guard string == numberFiltered, range.location < 2 else {
            return false
        }

        if range.location==0, string.intValue == 0 {
            return false
        }

        guard let textFieldValue = textField.text?.intValue, let currentValue = string.intValue else {
            return true
        }

        let totalValue = textFieldValue*10 + currentValue

        switch totalValue {
        case 16..<80:
            return true
        default:
            textField.text = ""
            return false
        }
    }
}

最佳答案

你所做的大部分事情都是不必要的。只需计算新字符串是什么,尝试转换为 Int,然后检查范围。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let oldText = textField.text!
    let newText = oldText.replacingCharacters(in: Range(range, in: oldText)!, with: string)
    if let num = Int(newText), num >= 16 && num < 70 {
        return true
    }

    return false
}

仅供引用 - 这里使用 ! 都是安全的。 UITextField text 永远不会返回 nil,除非 iOS 中存在严重错误,否则该范围将有效。

关于ios - 如何让textField验证代码更加紧凑和可读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52657688/

相关文章:

ios - iOS 7.1 中 UISearchBar 的 UITextField

ios - 在多任务模式下向服务器发送超过 200 张图像?

ios - WebRTC ios设置

ios - 无法使用 SwiftUI 加载相机

ios - 将 UIPickerView 视为组合/选择框

ios - 是否可以更改 UITextView 和 UITextField 中单个单词的颜色

android - 为什么使用单线程模型作为主线程来更新 UI?

swift - 在 UISearchController iOS 11 上使用背景图片

ios - 从 Swift IOS 套接字获取 InputStream 中的文件

ios - 如何在 Swift 中限制不同 UITextField 的文本长度?