こんにちは、田中です。
3月のtry! Swiftもだんだんと近づいてきましたね、今から楽しみで仕方ありません。
ですが、予習しないとヤバそうな内容の濃さだろうなという危機感も感じています。
仙台のiOS勉強会ではおなじみの@totottiさんもtry! Swiftに出陣するとのことで、同じように「予習したいよね」という話になりこの度try! Swiftに向けたSwiftの予習勉強会として(仮)Sendai.swift 第0回を開催する運びとなりました。
エレベーター脇に貼っていただいていた案内の紙。
うん、シンプルでわかりやすい。

勉強会について
「そろそろ本格的にSwiftをやろうかな」という方が多くなってきたのかはわかりませんが、8名の方にご参加いただき満員御礼でした。ありがとうございます。 今回第0回のテーマはProtocol-Oriented Programming in Swiftでした。 「Swiftではクラスではなく積極的にProtocolを使っていこうぜ!」という感じです。 公式のWWDCのビデオとスライドを見ながら解説や議論をしていきましたので、このエントリの内容もそれに沿った内容になります。 なので、このエントリはビデオとスライド一緒に追いながら見るとより理解が捗るかと思われます。 解説・参考は以下の二つの記事を活用させていただきました。 ・Swift 2で提唱されているProtocol Oriented ProgrammingをWWDCセッションから学ぶ ・Swiftにおけるプロトコル指向プログラミング 初回としてはなかなか重めの内容でしたが(自分自身理解がまだ追いついてないです;)、Swiftに関してこういった設計寄りで濃い内容を語らう場というのは仙台では初めてだったのでとても楽しかったです!
議論されたこと
継承問題
Swiftは継承できる親クラスは一つで限られています。 そのため継承するクラスは慎重に選ばなくてはいけません。 それに対してProtocolは複数採用することができるため、Protocolで代替できるところはProtocolで書いていく方が良いのかもしれません。実装内容はサブクラスで定義したい場合
クラスでメソッドを定義する場合は実装内容を書かなくてはいけません。 しかしその具体的な内容はサブクラスで定義したい、ということがあるかと思います。 クラスで書く場合は親クラスの実装でfunc hoge() { fatalError("implement me!") }などと記述したりするのはよくしがちです。 fatalError()がカッコ悪い! 実装しないなら実装しないでおきたい! そんな時はProtocolでメソッドの定義だけにとどめておいて、実装はそのプロトコルを採用した先でやればいいですね。
heterogeneous(adj. 異種の)とhomogeneous(adj. 同種の)
┌(┌^o^)┐ホモォ... 公式のスライドを引用します。
Protocol Extensionっょぃ
既存のプロトコルに対して追加実装を行えるというSwift2からの機能。 Appleの標準フレームワークなどに対してもExtensionできるため、便利です。 よくStringにBase64の実装を追加するときなんかとかに使うよねーという話も出ました。 さらにExtensionで書く場合、デフォルトの実装部分も書けるためまた便利です。 デフォルト実装ができるとどこかに変更が必要になった時、クラッシュしたりすることも減ってよりセーフにプログラムが書けるのかなぁということも個人的には考えてました。where便利そう
制約によって細かく内容を分岐させられるので便利そう。 使ってみようじゃないか。その他
class vs structでどっちを使うべきか? Swiftはできるだけimmutableなものを使って書いていくべき? など。懇親会
というかお腹空いたのでご飯と酒を摂取しに、Lucy&Gluttonに行きました。 ランチでは前から度々来てましたが、夜は初めてです。