Swiftの動向とアツさを追う try! Swift参加レポート

try! Swift 2日目 参加レポート

この記事を読むのに必要な時間:およそ 5 分

Swiftの世界的カンファレンス,try! Swiftが3月2日~4日の3日間にわたり,渋谷のサイバーエージェントのオフィスにて開催されました。

本イベントの興味深いセッションをいくつか,日ごとにレポートしています。1日目のレポートに続き,2日目の模様をレポートします。

Ayaka Nonakaさん「実践的 "Boundaries"」

venmoでiOSのリードをしているAyaka Nonakaさん@ayanogagonは,Boundariesで得た知見を元に実践的なSwiftのコードに落としこむテクニックを発表しました。

画像

Gary BernhardtさんのBOUNDARIESという講演を聞いた時に「Functional Core」「Imperative Shell」をどう活用できるか悩んでいたそうです。悩んだ結果,最初は理論を感覚で捉えて,実装時に「使えるのでは?」と思った時に使えば良いと考えるようになったそうです。

画像

IMMUTABLE CORE NETWORK-Y SHELL

Functional Coreを不変なコア,Imperative Shellをネットワーク環境による表面として例示しました。

最初に与えられた値によって表示内容が確定する画面の場合はFunctional Coreとして振る舞うことができます。上記とはまた別でネットワークを用いて後から詳細な情報を取得するような流動的な画面はImperative Shellとして振る舞うことができるとのことでした。

画像

境界(Boundary)を見つける

実装設計をする上で,コードのどの部分が不変なもので「堅実なパターン」に適しているか把握し,そして同じようにどの部分がネットワークコードのように「流動的なパターン」に適しているかを把握するのが大切だと言います。「堅実なパターン」「流動的なパターン」のバランスをとり,境界(Boundary)を見つけることで,安全で将来性のあるコードが書けると述べていました。

画像

Adam Bellさん「プロトタイピングの魔法」

facebookから提供されているアニメーションエンジンpopのメンテナンスをしているAdam Bellさん@b3llは,アニメーションのプロトタイピングについてセッションを行いました。

画像

振り返り

iOS 7以前のUIがスキューモーフィズムだった頃のアニメーションとiOS 7以降のフラットでシンプルなUIのアニメーションを振り返りました。スキューモーフィズムが実世界の物に似せるようなアニメーションをすることに対し,iOS 7以降のアニメーションはシンプルなものになっていました。ただアニメーションが不要になったというわけではなく,アプリケーション自体を楽しくさせるためにアニメーションは重要な要素であると指摘しました。アニメーションは何が起きるのかを見せるものであって,必ず目的と意図が必要とのことです。

アニメーションを入れない選択肢をしない

また,アプリケーションの動作が遅くなるからといってアニメーションを入れないのではなく,適切な方法で実装すべきとのことでした。CoreAnimationはフレームを落とさないように設計されており,CARenderServerで高い優先度で処理されるため,最適化をしていないコードで使わない限り遅くなることは無いと説明しました。

Xcodeのplaygroundでプロトタイピング

アニメーション作成のプロトタイピングツールとしてXcodeのPlaygroundを使った方法を実践していきました。次期バージョンよりジェスチャも使えるようになるため,タップした際のアニメーションも結果が見やすくなっていました。

画像

XcodeをSwiftで簡単にプロトタイピングができるようになったので,自分の限界を引き上げるようなコードに挑戦してくださいと述べていました。

Matthew Gillinghamさん「プロトコルエクステンション:歴史について」

Tokyo iOS Meetupの主催をしているMatthew Gillinghamさん@gillygizeは,プロトコルエクステンションに至るまでの言語の歴史を紹介しました。

画像

継承と抽象の問題

まずはオブジェクト指向のなかで,継承という概念が生まれ,やがて抽象クラスの概念ができました。ただし,シングルインヘリタンスはクロスカッティング問題が存在します。構造が違うサブクラスが2つ以上存在する場合,片方のサブクラスからサブクラスを作成した場合,もう片方のサブクラスの実装コードの共有ができなくなってしまいます。

また,同じインターフェースを持つ親を複数継承したときインターフェースが衝突してしまう問題があります。この問題はダイヤモンド継承問題と言われています。

画像

プロトコルの誕生

そこでメソッドの名前で具体的な実装情報は持っていないprotocolという概念が生まれました。protocolはメソッド名のみで実装コードを持たないため,実装コード同士が衝突してしまうダイヤモンド継承問題を解決しました。

プロトコルエクステンションの誕生

protocol extensionが生まれ,継承関係のないクラス同士でもクリーンな形で実装コードの共有ができるようになりました。

ただしMatthewさんは,protocol extensionはパワフルですが,protocol extension同士が衝突した際の問題など,別の複雑さが導入されていることに注意しました。

著者プロフィール

田中孝明(たなかたかあき)

岡山県岡山市出身。愛知県>福岡県と様々な地で開発業務に従事。電子制御機器のプログラミングでC言語に触れてから,C++,Java,PHP等を経験。iPhoneアプリ開発に触れてからはObjective-Cを学び,2015年にクラスメソッドにジョインしてからはSwiftでのiPhoneアプリ開発に従事。

Twitter:@kongmingtrap

コメント

コメントの記入