firstIndexのIndex?to Int変換

utf16Offset

Swiftの文字列検索で使うfirstIndex()やlastIndex()はelement引数にCharacterすることでIndex?が返ります。この場合Int型ではなくIndexなので確認すると下のようなデータです。

Index(_rawBits: 65793)
Index(_rawBits: 65793)

Index型なので操作には問題ありませんが、Intに変換したい場合があります。この場合encodedOffsetを使うというサイトを見かけますが下記のようなメッセージがでます。

encodedOffset has been deprecated as most common usage is incorrect. Use utf16Offset(in:) to achieve the same behavior.
encodedOffsetは非推奨
encodedOffsetは非推奨

encodedOffsetは非推奨になったようでutf16Offset<S>(in s: S) -> Intをつかったほうがいいようです。たとえば下記のような”#”などをハッシュタグとして判断したい場合、何文字目に”#”が入っているのか確認できます。

let seven:String = "ウルトラ#セブン"
let i:Int = seven.firstIndex(of: "#")!.utf16Offset(in: seven)
print (i)

このコード内変数iには4が入ります。