gpt4 book ai didi

ios - "Cannot Increment endIndex"因为表情符号

转载 作者:行者123 更新时间:2023-11-29 11:56:48 24 4
gpt4 key购买 nike

我有一个函数可以找到用户在 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!
}

最佳答案

I believe this is because of the different character counts in String vs NSString

你说得对。您在使用 NSRange (Cocoa) 和 Range (Swift) 之间来回切换——它们的工作方式不同。而 NSString (Cocoa) 和 String (Swift) 对于字符边界在哪里有不同的想法。您需要保持一致。

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

完全使用 NSRange 形成您的 beginRange — 例如,调用 NSMakeRange。不要使用 characters.count;留在 NSString 世界中并使用字符串的 length(在 Swift 中,即它的 utf16.count)。那么一切都会好起来的。

关于ios - "Cannot Increment endIndex"因为表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38779327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com