Swiftで遊ぼう! on Hatena

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

Swiftで遊ぼう! - 259 - HappinessViewControllerでコントール MVC

2016年9月23日:Swift 3向けに改訂。ここの記事の内容は、Swiftで遊ぼう! - 252 - Happiness - Swift 3向けカスタムViewチュートリアル - Swiftで遊ぼう! on Hatenaに集約されました。このページに初めて来た人は Happinessプロジェクト 全体を理解するためにリンク先のページを読むといいでしょう。ここでは「MVC」の基本的な概念を説明しているのでページ自体は残しておきます。

スタンフォード大学ポール先生の講義、FaceViewというカスタムUIViewを作ったところで中断しているので続けます。

iOSプログラミングの基本は、MVCですね。

MVCモデルを最初に説明したのは随分前*1になりますね。M がモデル、V がビュー、そしてC がコントローラーを意味します。

f:id:yataiblue:20150325072653j:plain

まず、FaceViewというカスタムビューは当に「V」にあたるため、できるだけ一般化(ジェネリック)しておく必要があります。「このプログラムで何をしたいのか?」を最初に明確にしておかなければなりません。

顔をにんまりさせて幸福度を表現したいんですよね。

じゃあ「にんまり度」の変化がこのプロジェクトのコアとなる「M」のモデルにします。

「Calculatorプロジェクト」に取り組んでいた時のことを覚えていますか?プログラムの神髄にあたる計算部分は複雑だったので、CalculatorBrainというオブジェクトをユーザーインターフェイスのViewControler(C)から独立さて、モデル(M)にしました。

今日取り組んでいる「にんまり度」はどうだろう? Int型変数1つで表現する最も単純なモデル(M)です。「0」が1番不幸な状態で「100」が最も幸福な状態を表現しています。さて、モデルといってもInt型変数1つなので、このチュートリアルでは独立させず、HappinessViewController(C)に加えていきます。

f:id:yataiblue:20150325102019j:plain

happinessというInt型変数がモデル(M)です。

happinessの入力値を0から100の間に制限させる方法としてプロパティ・オブザーバーを使っていますが、この方法は覚えておくといいでしょう。勉強になります。

var happiness: Int = 50 { // 0 = もっども悲しく、100 = もっとも嬉しい
    didSet {
        happiness = min(max(happiness, 0), 100)
    }
}

さすがにもう説明はしませんが、入力された値が0と100の間に収まります。入力があればUIをアップデイトさせる必要もあるので、アップデイトさせる関数も用意します。

class HappinessViewController: UIViewController  {
    var happiness: Int = 50 { // 0 = もっども悲しく、100 = もっとも嬉しい
        didSet {
            happiness = min(max(happiness, 0), 100)
            print("happiness = \(happiness)") // コンソールで確認用
            updateUI()
        }
    }
    
    func updateUI() {
        // まだ実装してませーん
    }
}

これでモデルが完成! じゃあランすれば動くか? happinessの値を変化させても、FaceViewのにんまり度は変化しません。HappinessViewControllerとFaceViewが繋がっていないからです。これを繋げるために、プロトコールとデリゲーションの理解が必要になってくるという話の展開。ポール先生、教え方が上手い!

ということで今日はここまで