Swiftで遊ぼう! - 259 - HappinessViewControllerでコントール MVC
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
2016年9月23日:Swift 3向けに改訂。ここの記事の内容は、Swiftで遊ぼう! - 252 - Happiness - Swift 3向けカスタムViewチュートリアル - Swiftで遊ぼう! on Hatenaに集約されました。このページに初めて来た人は Happinessプロジェクト 全体を理解するためにリンク先のページを読むといいでしょう。ここでは「MVC」の基本的な概念を説明しているのでページ自体は残しておきます。
スタンフォード大学ポール先生の講義、FaceViewというカスタムUIViewを作ったところで中断しているので続けます。
MVCモデルを最初に説明したのは随分前*1になりますね。M がモデル、V がビュー、そしてC がコントローラーを意味します。
まず、FaceViewというカスタムビューは当に「V」にあたるため、できるだけ一般化(ジェネリック)しておく必要があります。「このプログラムで何をしたいのか?」を最初に明確にしておかなければなりません。
顔をにんまりさせて幸福度を表現したいんですよね。
じゃあ「にんまり度」の変化がこのプロジェクトのコアとなる「M」のモデルにします。
「Calculatorプロジェクト」に取り組んでいた時のことを覚えていますか?プログラムの神髄にあたる計算部分は複雑だったので、CalculatorBrainというオブジェクトをユーザーインターフェイスのViewControler(C)から独立さて、モデル(M)にしました。
今日取り組んでいる「にんまり度」はどうだろう? Int型変数1つで表現する最も単純なモデル(M)です。「0」が1番不幸な状態で「100」が最も幸福な状態を表現しています。さて、モデルといってもInt型変数1つなので、このチュートリアルでは独立させず、HappinessViewController(C)に加えていきます。
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が繋がっていないからです。これを繋げるために、プロトコールとデリゲーションの理解が必要になってくるという話の展開。ポール先生、教え方が上手い!
ということで今日はここまで