• Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
  • 初心者はここから!-> 50オヤジでもできるiOS開発
  • 私の本業、オフィシャルなブログ-> Life-LOG
  • Swift 3 対応

OOP(オブジェクト指向プログラミング)の真骨頂であるMVCパターンを理解するために必ず習得しなければならない概念がプロトコールとデリゲーションです。

しかし、時代は流れています。大きなプロジェクトに携わるとクラス継承を基本とした機能拡張では維持するのに多大な労力が必要になるそうです*1。また参照型のクラス利用では値の取り扱いにも注意が必要で見つけにくいバグとの戦いが想定されます。

そこで構造体(Struct型)やイーナム(Enum型)を中心にした値型を拡張するプログラミングスタイルが望まれ、それがプロトコール指向プログラミングです。プロトコールとデリゲーションによる拡張ではなくプロトコール(Protocol)とエクステンション(Extension)がベースになります。

ProtocolとExtensionを使った拡張性をPlaygroundで分かりやすく説明したページがありました。たぶんマストリードの内容です。内容も難しくないですよ。

www.raywenderlich.com

初心者の私はこの概念をどのようにOOP世界のiOSフレームワークに導入したらいいのかさっぱりわかりません。クラス体系で組み上げられているUIKitにプロトコール指向を利用する方法がWWDC 2017で紹介されていました。

developer.apple.com

ここで紹介されているプロジェクトもダウンロードして眺めましたが、難しいです...

ファイルが細切れで何を拡張しているのか全体の見通しが悪いような気がします...

プロジェクトのメインテナンス性に優れているプロトコール指向ですが、Appleのデモプロジェクトは私のような初心者には大きすぎです。もう少しコンパクトなデモがあればいいんですけどね。

iOSを構成するMVCパターンはクラスで構成されているため「V」と「C」はそのままクラス利用が必要で、UIKitを必要としない「M」は構造体を中心にした「プロトコール&エクステンション」で拡張していくことが望まれます。また、「V」に関して、抽象的な描画に関してプロトコールに置き換えていくといいようです。

AppleもこれからiOSフレームワークのプロトコール化を進めていくと思われるので、来月開催のWWDC 2018でプロトコール指向がどれだけ進化しているのか楽しみです。

私もプロトコール準拠のためにデリゲーションメソッドの実装を「Extension」に変更していこうと思います。

*1:まだ自分のアプリも作れないのに大きなプロジェクトの話などとうてい想像できませんけど