こんにちは、田中です。
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でメソッドの定義だけにとどめておいて、実装はそのプロトコルを採用した先でやればいいですね。