我有一个扩展名,用于识别并返回光标前的单词:
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包含在特殊字符的完整单词中?
谢谢
答案 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
}