在 textView 中添加表情符号然后崩溃 Swift
Add Emoji in textView then Crash Swift
我正在尝试使用字符串值在 textView 中添加表情符号,但是当我在 textView 中输入文本时,应用程序崩溃并出现错误:
Fatal error: cannot increment beyond 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
您计算 String.Index
的代码有误。当 text
.
中包含非 BMP 字符(例如,Emoji)时,它不起作用
试试这个:
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
}
我正在尝试使用字符串值在 textView 中添加表情符号,但是当我在 textView 中输入文本时,应用程序崩溃并出现错误:
Fatal error: cannot increment beyond 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
您计算 String.Index
的代码有误。当 text
.
试试这个:
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
}