Swiftで遊ぼう! - 692 - Closures, Extensions, Protocols, Delegation, and ScrollView 3
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- Swift2.1 & Xcode7.1対応の日本語版アップルチュートリアル!
- Table View実装チュートリアルをXcode7.3で解説
- Core Data シンプルチュートリアル
- 私の本業、オフィシャルなブログ-> Life-LOG
今日のパートはOOPの神髄です。
Developing iOS 9 Apps with Swift - Free Course by Stanford on iTunes U
Extensions、Protocols そして Delegation...
詳しく説明すべきパートですが、自分なりに理解しているので、軽く聞き流しました。しかし聴講してから気がつきましたが、2年もSwiftの勉強しているのにExtensionとProtocolの違いを理解していなかったんです。
今回ポール先生の話をきいて概略は理解できました。
Extensionは、型にメソッドを与え、Protocolは型に型を与える拡張と考えていいんでしょう。
FaceItプロジェクトを使って実際の実装を少し練習してみたんですが、なかなか頭の硬いオヤジ脳では上手いか無かったんです。
今日はExtensionを考えていきます。Extensionは「型」にメソッドを自由に与える機能があります。メソッドということは値を保持するプロパティは持てませんが、計算型プロパティは持てるということです。Extensionを使えば、いくらでも無秩序に「型」の機能を拡張することもできるようで、いい加減に拡張していくと、目も当てられない状態になってしまいます。ちゃんと秩序だった拡張をすべきだとポール先生は強調しています。
彼がデモとしてとりあげたのは、セグエ先がNavigation ControllerでもViewControllerをプロパティとして返す計算型プロパティをExtensionで用意するってやつです。
NavigationControllerはViewControllerのサブクラスなんで、visibleViewControllerというプロパティを持っています。
ということでFaceViewController.swiftの最後に次のようなExtensionファイルを用意します。
extension UIViewController { var contentViewController: UIViewController { if let navcon = self as? UINavigationController { return navcon.visibleViewController ?? self } else { return self } } }
これを利用するところで悩んでしましました。
のろまな亀ですが、今日はここまで。