iT邦幫忙

2025 iThome 鐵人賽

DAY 21
0
生成式 AI

三十天解鎖上下文超能力:MCP 實戰系列 第 21

Day 21 - 跨平台實戰 I 架構先行:搭建 iOS 專案與資料模型

  • 分享至 

  • xImage
  •  

大家好,鐵人賽堂堂邁入第二十一日,歡迎來到我們最令人興奮的篇章——原生 App 開發

在過去二十天,我們已經用 Python 成功地將 AI Agent 變成了一個專業的 Web API 服務。從今天開始,我們將為這個強大的後端,打造一個精美、流暢的 iOS App 前端介面。

今天,我們不急著畫按鈕或拉畫面,而是先來做最重要的基礎建設。我們將學習如何:

  1. 建立一個結構清晰的 Xcode 專案。
  2. 用 Swift 的 Codable 協議,為 API 建立強型別的資料模型。

一個穩固的架構,是我們 App 成功的基石。

一、專案結構與起手式 (MVC 架構)

首先,請打開 Xcode 並建立一個新的 iOS App 專案。為了讓專案在未來功能擴充時依然保持整潔,我們將採用經典的 MVC (Model-View-Controller) 設計模式來組織我們的檔案。

請在專案中建立如下圖所示的資料夾結構:

  • Model: 存放我們的資料模型與業務邏輯。所有與 API 溝通的 structNetworkManager 都會放在這裡。
  • View: 存放所有純粹的 UI 元件,例如我們稍後會建立的聊天氣泡 MainTableViewCell.xib
  • Controller: 我們的「指揮官」MainViewController,負責協調 Model 和 View 之間的互動。

這種職責分離的架構,能讓我們的程式碼更易於理解、測試和維護。

二、模型的建立 - 用 Codable 解析 API

要與我們的 Python adk-api 服務溝通,第一步就是要讓 Swift App「看得懂」API 回傳的 JSON 格式。在 Swift 中,我們使用 Codable 這個強大的協議,來自動化地完成這項任務。

我們在 Model/API 資料夾下建立一個 Adk.swift 檔案,用來定義所有與 API 相關的資料結構。

// Adk.swift

import Foundation

// MARK: - Update Session API Response
// 這個 struct 對應 /sessions 端點的回應
struct UpdateSessionResponse: Codable {
    let id: String
    let appName: String
    let userId: String
    let lastUpdateTime: Double

    // CodingKeys 是 Codable 的精髓所在
    // 它能將 API 的 snake_case (例如 app_name)
    // 自動轉換為 Swift 慣用的 camelCase (例如 appName)
    enum CodingKeys: String, CodingKey {
        case id
        case appName = "app_name"
        case userId = "user_id"
        case lastUpdateTime = "last_update_time"
    }
}

程式碼亮點解析:

  • Codable 協議: 只需要在 struct 後面遵循 : Codable,Swift 編譯器就會在背後為我們自動生成 JSON 與 struct 之間的轉換邏輯,省去了手動解析的大量功夫。
  • CodingKeys 枚舉: 這是處理不同命名風格的「最佳實踐」。透過它,我們的 Swift 程式碼可以保持優雅的 camelCase 風格,同時又能完美對應後端 API 的 snake_case 格式。

今日總結

今天我們為 App 打下了最關鍵的地基。雖然畫面上還是一片空白,但我們的專案已經具備了:

  1. 清晰的 MVC 專案架構。
  2. 能夠精準解析後端 API JSON 的強型別資料模型。

我們的 App 已經學會了與後端溝通的「語言」。明天,我們將在此基礎上,利用 async/await 打造一個可重複使用的 NetworkManager,建立起 App 的「通訊管道」,並準備發送第一筆真實的 API 請求!


上一篇
Day 20 - 使用 adk 開一個 Wazuh MCP API Server 出來吧!!!
系列文
三十天解鎖上下文超能力:MCP 實戰21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言