Swift-在textView中的光标之前识别单词(带有特殊字符)

Mar*_*rco 3 string uitextview ios swift

我有一个扩展,可以识别并返回光标之前的单词:

extension UITextView {

var currentWord : String? {

    let beginning = beginningOfDocument

    if let start = position(from: beginning, offset: selectedRange.location),
        let end = position(from: start, offset: selectedRange.length) {

        let textRange = tokenizer.rangeEnclosingPosition(end, with: .word, inDirection: 1)

        if let textRange = textRange {
            return text(in: textRange)
        }
    }
    return nil
}
Run Code Online (Sandbox Code Playgroud)

我正在使用UItextGranularity.word并正常工作。

但是我的问题是这样的:

如果单词的开头有@,则不会返回。因此,如果我有@jon,则当前单词将为jon。有没有办法将@包含在内,以使完整的单词带有特殊字符?

谢谢

Guy*_*gus 6

似乎您无法使用UITextInputTokenizer。您可以尝试以下解决方案:

var currentWord: String? {
    let regex = try! NSRegularExpression(pattern: "\\S+$")
    let textRange = NSRange(location: 0, length: selectedRange.location)
    if let range = regex.firstMatch(in: text, range: textRange)?.range {
        return String(text[Range(range, in: text)!])
    }
    return nil
}
Run Code Online (Sandbox Code Playgroud)

  • 这会因表情符号等多字节字符而崩溃。它应该是`return (text as NSString).substring(with: range)`。 (2认同)