Yosuke Ishikawaさん「Protocol-Oriented Programing in Networking」
ネットワークライブラリAPIKitの開発者のYosuke Ishikawaさん
NSURLSessionをProtocolを使ってラッピングする
実装のゴールとしてはリクエストの型を指定すると自動でレスポンスの型が決定され,
この設計にProtocolが適している理由は以下の2つだそうです。
- リクエストとレスポンスを紐付けが可能になる
Protocol内でtypealiasなレスポンスを宣言し,
レスポンスを返すメソッドを作成することで, リクエストとレスポンスを紐付けることができます。リクエストの結果を受け取った時にレスポンスを返すメソッドを使用することで, リクエストごとに違う型を返すことができます。 - デフォルト実装をフレキシブルに実装できる
DecodableというProtocolでdecodeメソッドを定義します。Protocol ExtensionにDecodableに準拠したResponseの型制約を使うことで,
Protocol ExtensionのメソッドでResponseからdecodeメソッドが呼べるようになります。
参考になるソースコードは以下のものだそうです。
Generic Programing on Protocols
ページングなどの制約をprotocolで表していました。
- ページ情報とページ指定をするメソッドを定義したProtocolを定義
- 次のページの有無を表すProtocolを定義
- 上記のProtocolに準拠したページネーションクライアントを実装
Protocolで定義したメソッドでしか実装しないことで汎用的なページネーションタイプのクライアントになれるとのことです。
Reactive Stream
最後にRxSwiftを用いて,