Ios &引用;无法增加endIndex";因为表情符号

Ios &引用;无法增加endIndex";因为表情符号,ios,uitextview,Ios,Uitextview,我有一个函数,用于查找用户在UITextView中选择的当前单词。但是,如果在UITextView.text属性中有表情符号时调用此函数,则会看到崩溃。我相信这是因为String和NSString中的字符计数不同 我如何正确地转换它 func currentWord() -> String { let cursorPosition = selectedRange.location let separationCharacters = NSCharacterSet(char

我有一个函数,用于查找用户在UITextView中选择的当前单词。但是,如果在UITextView.text属性中有表情符号时调用此函数,则会看到崩溃。我相信这是因为String和NSString中的字符计数不同

我如何正确地转换它

func currentWord() -> String {

    let cursorPosition = selectedRange.location
    let separationCharacters = NSCharacterSet(charactersInString: " ")

    // crash occurs here
    let beginRange = Range(text.startIndex.advancedBy(0) ..< text.startIndex.advancedBy(cursorPosition))
    let endRange = Range(text.startIndex.advancedBy(cursorPosition) ..< text.startIndex.advancedBy(text.characters.count))

    let beginPhrase = text.substringWithRange(beginRange)
    let endPhrase = text.substringWithRange(endRange)

    let beginWords = beginPhrase.componentsSeparatedByCharactersInSet(separationCharacters)
    let endWords = endPhrase.componentsSeparatedByCharactersInSet(separationCharacters)

    return beginWords.last! + endWords.first!
}
func currentWord()->字符串{
让cursorPosition=selectedRange.location
让separationCharacters=NSCharacterSet(charactersInString:)
//这里发生车祸
让beginRange=Range(text.startIndex.advancedBy(0)
我相信这是因为String和NSString中的字符计数不同

你说得对。您在使用NSRange(Cocoa)和Range(Swift)之间来回切换,它们的工作方式不同。而NSString(Cocoa)和String(Swift)对字符边界的位置有不同的想法。你需要始终如一

在第一行中使用
selectedRange
后,您就进入了NSRange的可可世界。你需要始终如一地留在可可世界。不要使用任何快速范围!不要使用任何Swift
字符


完全使用NSRange形成
beginRange
——例如,调用
NSMakeRange
。不要使用
字符。计数
;停留在NSString世界中,使用字符串的
长度
(在Swift中,即其
utf16.count
)。然后一切都会好起来。

我尝试过这个方法,但现在当我调用“substringWithRange”方法时,它说范围超出了界限。有什么想法吗?没关系,我的错误是NSMakerRange应该是(开始,结束-开始)。我有(开始,结束)。