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

时间:2017-11-16 14:52:53

标签: ios swift string uitextview

我有一个扩展名,用于识别并返回光标前的单词:

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
}

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

但我的问题是:

如果在单词的开头我有一个@它将不会被退回。 所以,如果我有@jon,那么currentword将是jon。 有没有办法将@ so包含在特殊字符的完整单词中?

谢谢

1 个答案:

答案 0 :(得分:4)

您似乎无法使用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
}