Swiftで遊ぼう! - 683 - Interface Builder, FaceView controller, Gestures, Multiple MVCs 3
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- 初心者はここから!-> 50オヤジでもできるiOS開発
- 私の本業、オフィシャルなブログ-> Life-LOG
- Swift 3 対応
2017年3月16日:Developing iOS 10 Apps with Swift - Free Course by Stanford on iTunes Uが公開されたため変更を加えます。ここの内容は「講義5 Gestures and Multiple MVCs」の内容に変更します。
さっそくMVCモデル構築に入ります。
Developing iOS 9 Apps with Swift - Free Course by Stanford on iTunes U
FaceViewクラスはビュー(V)になるので表示のためのデータを保持するところではありません。FaceViewControllerもデータ保持の役割はないので、モデル(M)クラスが必要になります。ユーザーインターフェイスから切り離された「FacialExpression」を用意します。ポール先生は事前に用意されているファイルをドラッグ&ドロップしましたが、私はメニューから新規ファイルを作ります。
// Developing iOS 10 Apps with Swiftに対応 import Foundation struct FacialExpression { enum Eyes: Int { case open case closed case squinting } // iOS 9の内容をカット // enum EyeBrows: Int { // case Relaxed // case Normal // case Furrowed // // func moreRelaxedBrow() -> EyeBrows { // return EyeBrows(rawValue: rawValue - 1) ?? .Relaxed // } // // func moreForrowdBrow() -> EyeBrows { // return EyeBrows(rawValue: rawValue + 1) ?? .Furrowed // } // } enum Mouth: Int { case frown case smirk case neutral case grin case smile // iO 9でメソッドを用意していました // func sadderMouth() -> Mouth { // return Mouth(rawValue: rawValue - 1) ?? .Frown // } // // func happierMouth() -> Mouth { // return Mouth(rawValue: rawValue + 1) ?? .Smile // } // } var sadder: Mouth { return Mouth(rawValue: rawValue - 1 ) ?? .frown } var happier: Mouth { return Mouth(rawValue: rawValue + 1) ?? .smile } } var sadder: FacialExpression { return FacialExpression(eyes: self.eyes, mouth: self.mouth.sadder) } var happier: FacialExpression { return FacialExpression(eyes: self.eyes, mouth: self.mouth.happier) } var eyes: Eyes // iOS 9は眉毛も操作していました // var eyeBrows: EyeBrows var mouth: Mouth }
ここで腑に落ちない部分がありました。このモデルクラス、よく見るとStruct型(構造体)です。クラスじゃないんです。ポール先生は何も説明していないし、理由がよく分かりません。クラスで重要な概念であるプロトコールとデリゲーションをまだ説明していないので、継承のできない実値を扱うStruct型で説明をしているのかとおぼろげに感じたぐらいです。プログラマーの皆さん、どでしょうか?
普通はクラス宣言をすべきですよね。ここで説明のポイントはあくまでも、MVCの役割分担になっています。Modelは眉毛の位置や口のカーブの状態なんてどうでもいいことです。表情の情報だけ持っています。一方Viewは表情が笑っているとか悲しいという情報は入りません。この両者の間を取り持つのがControllerなんです。ということでFaceViewControllerに実装を始めます。
ちなみに、enumもメソッドを保持することができて、「rawValue」を持つことができます。私は説明無しで理解できたので分からない人は「The Swift Programming Language本」を読むといいでしょう。ポール先生も本を読んで勉強しろと仰ってます。
今日はここまで。