見出し画像

続・スタンフォード式iOSアプリ開発講座をやってみた【前編】

前回に引き続き、「スタンフォード大学 iOSアプリ開発講座 CS193p レクチャー3」を実践したので振り返ります。神経衰弱のようなカードゲームのアプリを開発していきます。レクチャー3のテーマは、MVVM(Model, View, ViewModel)アーキテクチャ、ジェネリス、関数プログラミングだったように感じました。
アプリのUIに大きな変更はなく、MVVMアーキテクチャを導入するために、ジェネリクスと関数プログラミングを利用したコードにリファクタリングするような内容でした。なお、このページを読む上で、当方が英語を気持ちで聴くタイプであることに注意してください。

MVVMアーキテクチャ

アーキテクチャとは「概念上の仕組み」のようなものです。SwiftUIで開発されたアプリの場合は、ModelとViewがViewModelを介して相互に連携するため、MVVMと呼ばれるそうです。

SwiftUIフレームワークが登場する以前は、UIKitフレームワークでiOSアプリを開発していました。UIkit時代のアーキテクチャはMVCと呼ばれており、ModelとViewControllerを連動させてアプリを動作させる仕組みでした。

MVVMにおけるModelは、アプリ内のデータを指します。モデルのデータは複製されることなく、常にアプリにおいて「信頼できる情報源」です。
一方のViewは、データを表示するための器といえます。データを「どのように表示するか」を宣言する役割を担います。Viewが「データの状態」を所有することはありません。

ジェネリクス

ジェネリクス(generics)は、Swiftにおけるプログラミング手法のひとつです。ジェネリック・プログラミングということもあります。Swiftにおいて、データは型に強く結びつけられます。そのため、型が不明なデータはコンパイル時にエラーになります。

しかし、ジェネリクスを利用すると、データの型を「後から決められる」ようになります。「後から」というのは、「実行時」と理解して良いでしょう。データを宣言する際には、プレースホルダーとして「型の名前」を決めておけば、実際にそのデータが「どんなデータ型になるか」はプログラムの実行時に決まるという仕組みです。

関数プログラミング

構造体やクラス、列挙型などのように、関数を型として扱うプログラミングを関数プログラミングといいます。Swiftは関数プログラミングをサポートしているので、関数を定数および変数に割り当てたり、関数を「関数のパラメータ」として受け渡すことができます。

Swiftで関数プログラミングを記述する際に使われるのが、クロージャです。クロージャは、無名関数と呼ばれることもあります。クロージャ形式でコードを記述することで、プログラムの見た目がより簡潔になります。

レクチャー3の後半

レクチャー3は「前半の座学」と「後半のハンズオン」で構成されていました。ハンズオンの部分は改めて、投稿できればと思います。

いいなと思ったら応援しよう!