RubyやPHPの場合、railsやlaravelといったフレームワークがMVC構造で作成されているため、比較的容易にMVCでwebアプリを作ることができました。
しかし、Swift(iphoneアプリ)の場合、これといったMVC用のフレームワークがなく、自分でModel, View, Controllerを切り分けなければなりません。
そこで、今回は、簡単なiphoneアプリをMVC構造で作成したのでご紹介します。

今回は、このただのTableViewにタイトルをならべるだけのアプリをMVCでつくります。

ファイル構造はこのような形で、
- View・・・描写するstoryboard
- Model・・・表示するデータ一覧
- Controller・・・Modelからデータを取得して、View(TableView)に描写する
という役割です。
View
こちらはただのTableViewControllerを配置しているだけですので、説明は割愛します。
TableViewControllerがよくわからない方はこちらの記事をご参照ください。
Model
データ一覧を保持しているModelです。
Modelディレクトリの中には2つファイルが入っていて、
- Article.swift・・・記事単体の情報をもつクラス(データ型)
- AllArticle.swift・・・Article型のlist
になっています。
Article.swift
1 2 3 4 5 6 7 8 9 10 11 12 |
import Foundation class Article { let id: Int let title: String init(articleId: Int, displayTitle: String) { id = articleId title = displayTitle } } |
AllArticle.swift
1 2 3 4 5 6 7 8 9 10 11 |
import Foundation class AllArticle { var list = [Article]() init() { for i in 1..<10 { list.append(Article(articleId: i, displayTitle: "タイトル \(i)")) } } } |
このように、Article.swiftでArticleクラスを作り、AllArticleクラスをインスタンス化したタイミングで、10個のArticleクラスがlist配列の中に入るようになっています。
Controller
最後にControllerです。Controllerの役割は、Modelからデータを持ってきて、Viewに表示すること。
今回は、AllArticleクラスをControllerでインスタンス化して、AllArticleクラスが持っている10個のArticleをTableViewに描写しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import UIKit class TableViewController: UITableViewController { let allArticle = AllArticle() override func viewDidLoad() { super.viewDidLoad() } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return allArticle.list.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) cell.textLabel!.text = allArticle.list[indexPath.row].title return cell } } |
これで、ビルドすると、tableViewにAllArticleの内容が描写されます。
MVCで大規模アプリを作った経験はないので、いつか作ってみたいです!