iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0
Mobile Development

Swift iOS 開發新手村:從入門到 AI 聊天室系列 第 23

Day 23|Xcode 架構教學:掌握 MVC 設計模式

  • 分享至 

  • xImage
  •  

昨天我們學會了 TableView 這個強大的元件,但隨著 App 功能增加、檔案變多,我們的專案是不是開始變得像一個雜亂的房間?所有東西都堆在一起,想找個東西找不到,想加個新家具也沒空間。

在我們一頭栽進更複雜的功能前,今天必須先學會如何整理這個房間!我們將導入 iOS 開發中最基礎也最重要的架構模式:MVC(Model-View-Controller)。它就像一套聰明的收納系統,教我們如何將「資料」、「畫面」和「邏輯」分門別類地放好,讓專案變得井然有序、清爽宜人。

今日學習重點

  • 認識 MVC 架構:了解 ModelViewController 的三大組成部分與各自的職責
  • 專案檔案整理:學習如何在 Xcode 中建立群組(Group),並有條理地歸檔專案檔案
  • 實踐 MVC 分層:掌握將資料模型、畫面檔案與控制器邏輯分離的最佳實踐

為什麼要用 MVC 架構?

MVC(Model-View-Controller) 是 iOS 開發中最常見的專案架構,它能將專案分成三個部分:

  • Model(模型):負責資料結構與邏輯,例如資料類型、資料處理方法、API 請求等。
  • View(視圖):負責畫面呈現(Storyboard.xib、自訂 UI 元件等),不直接處理邏輯。
  • Controller(控制器):負責溝通 ModelView,接收使用者操作、更新資料、刷新畫面。

一句話概括:Model 管資料,View 負責美觀,Controller 當中間人。

MVC 架構的職責說明

模組 職責說明 範例檔案
Model 處理資料邏輯、API 解析、資料模型結構 Weather.swiftUser.swift
View 呈現 UI,不包含邏輯,專注於畫面 Main.storyboardCustomView.xib
Controller 負責溝通 Model 與 View,處理事件、控制流程 ViewController.swiftTableViewCell.swift

TableViewCell.swift 雖然繼承自 UIView(屬於 View),但它內部常常包含「設定 Cell 內容」的邏輯,角色類似 Controller,因此將它與 ViewController 放在一起管理也很常見。

在 Xcode 中的資料夾整理方式

假設你的專案原本長這樣(全擠在一堆檔案裡):

MyApp
 ├── AppDelegate.swift
 ├── Assets.xcassets
 ├── Info.plist
 ├── LaunchScreen.storyboard
 ├── SceneDelegate.swift
 ├── MainTableViewCell.swift
 ├── MainTableViewCell.xib
 ├── MainViewController.swift
 ├── MainViewController.xib

我們要改成這樣:

MyApp
 ├── Model
 │     // API 資料解析結構
 │
 ├── View
 │    // 主畫面
 │    // 自訂 UI 元件
 │
 ├── Controller
 │    ├── MainViewController.swift
 │    ├── MainViewController.xib
 │    └── Cell
 │         ├── MainTableViewCell.swift 
 │         └── MainTableViewCell.xib
 │
 ├── AppDelegate.swift
 └── SceneDelegate.swift
     ...

建立 MVC 架構的步驟

步驟一:建立資料夾

在左側的專案導覽器中,右鍵點擊最上層的藍色專案圖示或黃色的專案資料夾 → 選擇 New Group
重複這個動作,依序建立 ModelViewController 三個群組。
你也可以在 Controller 群組上按右鍵,用同樣的方式為它建立一個 Cell 子群組。
https://ithelp.ithome.com.tw/upload/images/20251007/20177542XGuxVe47PM.png

步驟二:移動檔案

依照 MVC 的職責劃分,理論上我們會這樣分類:

  • Model:存放資料模型的 .swift 檔案。
  • View:存放純畫面定義的檔案,如 .storyboard 或自訂的 UIView .xib 檔。
  • Controller:存放 UIViewController 子類別的 .swift 檔案。

不過,在實務上,為了方便管理,我們通常會將「功能相關」的檔案放在一起。 例如,MainViewController.swift 和它的介面檔 MainViewController.xib 幾乎總是一起修改。
因此,一個更常見且方便的整理方式是:

MyApp
 ├── Model
 │    └── Message.swift  // (假設我們為留言建立一個模型)
 │
 ├── View
 │    └── LaunchScreen.storyboard // (純 View 的檔案)
 │
 ├── Controller
      ├── MainViewController.swift
      └── MainViewController.xib // .xib 跟著 .swift 放在一起

以下是我們團隊的整理習慣,.xib 不一定全部放到 View,而是與對應的 .swift 放在一起,方便維護:
https://ithelp.ithome.com.tw/upload/images/20251007/2017754292RkTwxEU0.png

使用 MVC 的好處

  • 維護性高:改 UI 不會影響資料邏輯
  • 團隊開發方便:不同人負責不同層
  • 可擴充性強:增加功能時不會影響原本結構

小結一下

今天,我們完成了一次重要的「思維升級」,從單純寫程式,晉升到了思考程式架構的層次!

你不僅學會了 MVC(Model-View-Controller) 將資料、畫面與邏輯「各司其職」的核心概念,更掌握了在 Xcode 中建立資料夾、歸檔檔案的實務技巧。

從今天起,請養成這個專業習慣:為你的專案建立清晰的 MVC 架構。這不僅是為了現在的整潔,更是為了未來專案在擴充與維護時,能保有絕佳的彈性與效率。

🌟 明日預告

架構整理完畢,是時候回到有趣的功能開發了!而且明天,我們的 App 將第一次連上網際網路,與真實世界的資料互動!

我們將學習如何使用滾筒式的 選取器(PickerView),讓使用者像設定鬧鐘一樣輕鬆地選擇日期。接著,最酷的部分來了:我們將會串接 NASA 的公開 API,根據使用者選擇的日期,即時抓取當天的「每日天文一圖」!

這將是你第一次結合 UI 操作與網路請求,打造一個能獲取動態、外部資料的 App。準備好探索宇宙了嗎?

敬請期待 《Day 24|Xcode 滾動選取:PickerView & NASA 實戰應用(第一天)》


上一篇
Day 22|Xcode 互動進階:點擊編輯留言,動態更新列表
下一篇
Day 24|Xcode 滾動選取:PickerView & NASA 實戰應用(第一天)
系列文
Swift iOS 開發新手村:從入門到 AI 聊天室24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言