不允许少于 3 个字符的单词

Disallow words less than 3 characters

在下面的 Swift 代码中,用户选择一个词并将其输入到文本框中, 现在如何禁止输入长度小于 3 个字符的单词?

func isReal (word: String) -> Bool {
    //return true
    let checker = UITextChecker()
    let range = NSMakeRange(0, word.utf16.count)
    let misspelledRange = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: "en")
    return misspelledRange.location == NSNotFound
}

您可以添加一个 if 来检查单词是否超过 3 个字符:

func isReal (word: String) -> Bool {
    if word.characters.count >= 3 {
        //return true
        let checker = UITextChecker()
        let range = NSMakeRange(0, word.utf16.count)
        let misspelledRange = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: "en")
        return misspelledRange.location == NSNotFound
    } else {
        return false
    }
}

这样,如果word小于3个字符,它会return false,否则,它会测试UITextChecker()然后return truefalse 分别

编辑:替代使用guard:

func isReal (word: String) -> Bool {
    guard word.characters.count >= 3 else {
        return false
    }

    //return true
    let checker = UITextChecker()
    let range = NSMakeRange(0, word.utf16.count)
    let misspelledRange = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: "en")
    return misspelledRange.location == NSNotFound
}

如果不满足guard语句(即word.characters.count < 3),函数会自动return false

您可以实施 didEndEditing UItextfieldDelegate 方法,然后检查 1) 它是一个单词和 2) 它是否超过 2 个字符。那时你需要显示错误或红色标题标签或其他东西。

func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) {
    guard let string = textField.text else {
        return
    }
    let characterSet = CharacterSet(charactersIn: string)
    if characterSet.intersection(CharacterSet.whitespacesAndNewlines).isEmpty != true {
        // we have white space!
    }
    if string.characters.count < 3 {
        // too short
    }
}

您不需要实现新函数来检查来自 UITextField 的输入。 UITextField 有它自己的功能。你应该使你的 ViewController class 符合 UITextFieldDelegate 协议,将其设置为你的 UITextField 的委托,然后实现所需的委托方法,textFieldDidEndEditing 和检查那里输入的长度。

extension YourViewController: UITextFieldDelegate {
    func textFieldDidEndEditing(_ textField: UITextField) {
        guard let input = textField.text else {return}
        if input.characters.count < 3 {
            //handle error
        }
    }
}

YourViewControllerviewDidLoad 中:

yourTextField.delegate = self