Swift(UIKit)のMVCアーキテクチャーとは?役割と構造まとめ

この記事からわかること
- Swift/UIKitのMVCアーキテクチャーとは?
- Model/View/Controllerとは?
- 実際に各要素が該当するSwiftのクラスや構造
index
[open]
\ アプリをリリースしました /
SwiftのUIKitフレームワークを使用している際に重要となるMVCアーキテクチャーとはどのようなものなのか、そしてSwiftで開発したアプリでいうところの何に該当するのかをまとめていきたいと思います。
iOSアプリ開発:MVCアーキテクチャーとは?
そもそも「MVCアーキテクチャー」とはiOSアプリ開発だけでなく、アプリ開発などのソフトウェア開発に適応される考え方の1つです。その中でもMVCアーキテクチャーはアプリケーションのプログラムを3つの要素(Model-View-Controller)で構築する構造のことで、拡張性や保守性、作業性、再利用のしやすさなどさまざまなメリットが生まれます。
MVCアーキテクチャの3要素
- Model(モデル):データそのもの
- View(ビュー):表示される画面
- Controller(コントローラ):MとVを操作する
おすすめ記事: MVCモデル(アーキテクチャ)とは?
UIKitフレームワークはMVCアーキテクチャーに準じた構造で設計されており、公式リファレンスにも以下のように記述されています。
”UIKit アプリの構造は、Model-View-Controller (MVC) デザイン パターンに基づいており、オブジェクトは目的ごとに分割されています。”
Swift(UIKit)におけるMVC
UIKitにおける各クラスやデータをMVCに割り振ると以下のようになります。
- M:Dataオブジェクト
- V:UIView,UIWindow
- C:UIViewController,UIApplication
ここからは簡素なMVC構造を持ったUserModels構造体型のデータをリスト表示させるだけのサンプルを見ながら整理していきたいと思います。

Model:Dataオブジェクト
Model部分を司るのはDataオブジェクトです。これは表示させたいデータそのもののことであり、独自の構造体やクラスなどを定義します。ここにはあくまでデータ部分のみを定義するのでシンプルです。
import UIKit
struct UserModels {
var name:String
var age:Int
}
#if DEBUG
extension UserModels{
static var sampleData = [
UserModels(name: "John", age: 20),
UserModels(name: "Michael", age: 15),
UserModels(name: "Stephanie", age: 69),
UserModels(name: "Lloyd", age: 27),
UserModels(name: "Theodore", age: 42),
UserModels(name: "Bagwell", age: 30),
]
}
#endif
View:UIView,UIWindow
View部分を司るのはUIView
クラスやUIWindow
クラスです。実際にユーザーの目に触れる部分であるUI部分を構築します。ここではUITableViewのセル1つ1つの見た目を構築しています。
let cell = UITableViewCell(style: .default, reuseIdentifier: "myCell")
cell.textLabel?.text = self.userData[indexPath.row].name
cell.textLabel?.font = .systemFont(ofSize: 20)
Controller:UIViewController,UIApplication
Controller部分を司るのはUIViewController
クラスやUIApplication
クラスです。
ここでModelsとViewを繋ぎ合わせていきます。
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
let userData = UserModels.sampleData
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.userData.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: "myCell")
cell.textLabel?.text = self.userData[indexPath.row].name
cell.textLabel?.font = .systemFont(ofSize: 20)
return cell
}
}
MVVM
アプリの設計でMVCと同じくらい使用されるのが「MVVM」です。これはプログラムをViewModel/View/Modelの3つの要素として設計する設計思想です。
おすすめ記事:【Swift】MVVMアーキテクチャとは?ViewModelの役割
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。