0
UITextView
からタイプされている単語を取得しようとしています。私はここに別の答えは見つかりtextViewDidChange(_:)
に配置された次のコードを持っているが、それは絵文字のために動作しません:編集したUITextViewの単語を取得
func editedWord() -> String {
let cursorPosition = selectedRange.location
let separationCharacters = CharacterSet(charactersIn: " ")
// Count how many actual characters there are before the cursor.
// Emojis/special characters can each increase selectedRange.location
// by 2 instead of 1
var unitCount = 0
var characters = 0
while unitCount < cursorPosition {
let char = text.index(text.startIndex, offsetBy: characters)
let int = text.rangeOfComposedCharacterSequence(at: char) // Crashes here when there's an emoji.
unitCount = text.distance(from: text.startIndex, to: int.upperBound)
characters += 1
}
let beginRange = Range(uncheckedBounds: (lower: text.index(text.startIndex, offsetBy: 0), upper: text.index(text.startIndex, offsetBy: characters)))
let endRange = Range(uncheckedBounds: (lower: text.index(text.startIndex, offsetBy: characters), upper: text.index(text.startIndex, offsetBy: text.characters.count)))
let beginPhrase = text.substring(with: beginRange)
let endPhrase = text.substring(with: endRange)
let beginWords = beginPhrase.components(separatedBy: separationCharacters)
let endWords = endPhrase.components(separatedBy: separationCharacters)
return beginWords.last! + endWords.first!
}
は、私はそれは、whileループ内でクラッシュするという立場を示してきたが、クラッシュは、 "インデックスXは無効です"と言います。これをどうすれば解決できますか?
OPはSwiftを使用しています。スウィフトコードを使用して回答する必要があります。 –
これはemojisでは機能しません。入力された最後の単語のみが表示されます。カーソルが現在オンになっていることも覚えておいてください。そして、ええ、迅速。 – Tometoyou