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

この記事からわかること

  • Swift/UIKitMVCアーキテクチャーとは?
  • Model/View/Controllerとは?
  • 実際に各要素が該当するSwiftのクラス構造

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

SwiftのUIKitフレームワークを使用している際に重要となるMVCアーキテクチャーとはどのようなものなのか、そしてSwiftで開発したアプリでいうところの何に該当するのかをまとめていきたいと思います。

iOSアプリ開発:MVCアーキテクチャーとは?

そもそも「MVCアーキテクチャー」とはiOSアプリ開発だけでなく、アプリ開発などのソフトウェア開発に適応される考え方の1つです。その中でもMVCアーキテクチャーはアプリケーションのプログラムを3つの要素(Model-View-Controller)で構築する構造のことで、拡張性や保守性、作業性、再利用のしやすさなどさまざまなメリットが生まれます。

MVCアーキテクチャの3要素

おすすめ記事: MVCモデル(アーキテクチャ)とは?

UIKitフレームワークMVCアーキテクチャーに準じた構造で設計されており、公式リファレンスにも以下のように記述されています。

”UIKit アプリの構造は、Model-View-Controller (MVC) デザイン パターンに基づいており、オブジェクトは目的ごとに分割されています。”

引用:Code Structure of a UIKit App

Swift(UIKit)におけるMVC

UIKitにおける各クラスやデータをMVCに割り振ると以下のようになります。

ここからは簡素なMVC構造を持ったUserModels構造体型のデータをリスト表示させるだけのサンプルを見ながら整理していきたいと思います。

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

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の役割

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index