今年もiOSDCに参加しています。今年は、チケット購入後に外せない予定が入ってしまい、木曜夜の前夜祭と、金曜午後しか参加できません。短い時間ですが、情報のキャッチアップ含め、収穫の多い2日感にしたいです。

さて今回のポストは、前夜祭で聴講した2つのセッションのまとめです。自分のメモ用に書いているのでざっくりですが、スライドのリンクも付けていますので、参考になる方もいるかもしれません。

iOSDCに参加した意義みたいな部分を強調していきたいので、見出しはセッション名ではなく、学んだこと・得た知識の要点を記載していきます。


SwiftのStringの文字数の数え方が理解できた

スライド

String型は、Collection Protocolに準拠しているので、countを呼ぶことができますが、どうやって文字数を数えているのか、という話。というのもStringは、内部的にはUTF-8のシーケンスとして保持しているから、Arrayと同じcountならバイト数になるんじゃないか?など疑問が湧いてきます。

例えば、「ぱ」の一文字をとっても、Unicodeの内部表現では「ぱ」そのものを示すU+3071と、ひらがなの「は」と「゜」を組み合わせたU+306F+U+309Aの表現があります(拡張書記素クラスタ Extended Grapheme Clusters を使用した表現)。

Stringのcountでは、半濁点文字のような「前の文字に結合する文字」や国旗🇯🇵(🇯+🇵)のように「特殊な文字が組み合わさるもの」は、結合して=Unicodeの仕様に従って1文字としてカウントすることで、見た目通りの文字数を返すようにしているらしいです。

その他、ある文字が何番目かを知るには、前の文字を知らないと判断できない(= N番目の文字を取得するための計算量は O(N))という話や、unicodeScalars.countを呼ぶといくつのUnicodeで表現されているかが取得できるという話題もありました。

Segueにも4つの種類がある

スライド

tokoromさんの発表では、Segueの使い方とiOS 13で追加された機能などを紹介、実例が多くてイメージしやすい内容でした。

Static TableViewとの相性がよいようです。特定のCellをタップしたときの処理をSegueに定義しておき、Cellに割り当てておくことで、処理がバインドできるイメージ。UITableViewDelegateのdidSelectRowAtを実装しなくてもよくなるので、実装がシンプルになりそう。こんどStatic TableViewで実装するときは、試してみたいと思いました。

Storyboardを使っている人は会場の大半でしたが、Segueを使っている人は半分くらいまで減っていました。たしかに、Storyboardを使うと、チーム開発しているとコンフリクトしやすいから、Segueを使って複数の画面をStoryboardで管理するのは避けがちです。もしかして、うまくやる方法があるのかな……?


まとめ

iOSDC2019の前夜祭に参加しました。ちょっと遅く到着し、オープニングは見られませんでしたが、2つのセッションを聴講できました。明日は午後から参加予定(午前中に予定がある)。しっかり寝て、体調万全で参加したいです。

翌日(1日目)の感想はこちら → 1日目の感想