[iOSDC Japan 2019 リポート]「Stringの文字の数え方を完全理解する」というセッションを聞いてきました
[イベントレポート]Stringの文字の数え方を完全理解する
iOSDCの前夜祭でフェンリルの廣部さんによる「SwiftのStringの文字の数え方を完全理解する」というセッションを聞きました。
SwiftはUnicodeの扱いに非常に長けた言語であり、絵文字を含む文字列でも正しい文字数を計算してくれます。 その反面、Unicodeの複雑さに引きずられてしまい、直感的な操作ができない時もあります。たとえば、 string[2] と書いても3番目の文字を取得することはできません。 そんな複雑なところのあるSwiftの文字列処理ですが、複雑なものを受け入れてきちんと理解するのはそこまで難しいものではありません。 このトークでは、Unicodeとの関係を意識しながら、Swiftの文字数の扱い方とその裏にある考え方を解説します。
印象に残ったところ & 感想
SwiftのStringはUnicodeの扱いに長けた言語である反面、Unicodeの複雑さに引きずられてしまっている部分があります。
このセッションを聞いてStringの文字の数え方の裏側について少し理解をすることができました。
Array
Array
getではなくsetを行う場合はArray
一つのCharactorの内部表現がそれぞれ異なるため、Intを使った場合取得と入れ替えの計算量がO(1)にならず、O(n)となるためIntで添字アクセスできず、MutableCollectionに準拠できないという内容でした。
また、それらを行うためIntではなく独自に定義した型を使って計算量O(1)を満たしているということでした。
String型の添字アクセスを行う時にString.Indexという型のオブジェクトを渡しているのに気づいてはいたもののそういうものとして扱っていたのでこのセッションはとても楽しいものに感じました。
最後に、発表をしていただいたTakanori Hirobe(@taka1068)さんさん、本当にありがとうございました。