在textView中添加Emoji,然后在Crash Swift中

时间:2018-10-08 14:03:37

标签: ios swift uitextview

我正在尝试在具有字符串值的textView中添加表情符号,但是当我在textView应用程序中输入文本时崩溃并给我错误:

  

致命错误:不能增加到endIndex以外

func currentWord (_ selectedRange: NSRange, _ text: String) -> 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 {
       let start = text.index(text.startIndex, offsetBy: range.location)
       // Error is on the following line
       let end = text.index(start, offsetBy: range.length)
       return String(text[start..<end])
   }
   return nil
}

当我输入第二个表情符号然后崩溃时1 这行给我错误2

1 个答案:

答案 0 :(得分:3)

您用于计算String.Index的代码是错误的。 text中包含非BMP字符(例如,表情符号)时,此功能不起作用。

尝试一下:

func currentWord(_ selectedRange: NSRange, _ text: String) -> 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 {
        let indexRange = Range<String.Index>(range, in: text)!
        return String(text[indexRange])
    }
    return nil
}