読者です 読者をやめる 読者になる 読者になる

Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 692 - Closures, Extensions, Protocols, Delegation, and ScrollView 3

今日のパートは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
        }
    }
}

これを利用するところで悩んでしましました。

のろまな亀ですが、今日はここまで。