iT邦幫忙

2025 iThome 鐵人賽

DAY 30
0
Mobile Development

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

Day 30|Xcode 專案實戰:Gemini AI 聊天室總結與鐵人賽回顧!

  • 分享至 

  • xImage
  •  

我們做到了!恭喜所有跟著系列文走到這裡的朋友,也恭喜我自己,完成了這趟為期 30 天的鐵人賽旅程!

今天,是我們系列的最後一天。我們不會再學習新的語法或元件,而是要一起來完成兩件充滿意義的事:

  1. 為我們的 Gemini AI 聊天室專案進行最後的總結與測試。
  2. 回顧這 30 天的學習地圖,看看我們一起走了多遠。

這將是一篇充滿成就感的文章,讓我們開始吧!

第一部分:Gemini AI 聊天室專案總結

這部分是展示最終成果,並盤點在這個專案中學到的關鍵技術。

一、最終成果展示

經過前幾天的努力,我們的 Gemini AI 聊天室 App 已經功能齊全!它能接收使用者輸入、發送網路請求、解析 API 回應,並以動畫流暢地顯示對話。

二、關鍵技術盤點

在這個專案中,我們將過去所學的知識融會貫通,具體應用了以下核心技術:

  • 專案架構:我們遵循了 MVC 模式,將 ChatMessage(Model)、ChatViewController(Controller)和 Xib 檔案(View)各司其職。
  • 資料模型:學會使用 Codable,建立了 GeminiResponse 等結構體,輕鬆解析了複雜的巢狀 JSON。
  • 網路請求:打造了一個可重複使用的 NetworkManager,學會了如何用 URLSession 發送 POST 請求,並處理非同步回傳的 Result
  • UI 實作:精通了 UITableView 的進階用法,包括使用 insertRows 實現動畫更新,以及透過 UITextViewDelegate 監聽使用者輸入。
  • API Key 管理:學習了將敏感資訊存放在 Info.plist 中,並透過 .gitignore 避免其上傳到公開倉庫,這是邁向專業開發的重要一步。

三、下一步:如何讓這個專案更酷?

這個專案只是個起點,如果你想繼續挑戰,這裡有幾個很棒的優化方向:

  • 串流式回覆:研究 Gemini API 的 streamGenerateContent,讓 AI 的回覆可以像 ChatGPT 一樣,一個字一個字地「打」出來。
  • Markdown 支援:導入第三方函式庫(如 MarkdownKit),讓 AI 回傳的程式碼、列表等格式能漂亮地顯示。
  • 對話歷史紀錄:使用 UserDefaultsCore Data,將聊天紀錄儲存在手機本機,讓使用者下次打開 App 時能看到之前的對話。
  • 錯誤提示優化:當網路錯誤或 API Key 失效時,用 UIAlertController 跳出一個更友善的提示視窗,而不只是 print 在控制台。
  • UI 優化:打造真正的對話泡泡!你可以回頭參考 Day 28 我們討論過的自訂 Cell 作法,讓介面更精美。

第二部分:30 天鐵人賽旅程回顧

一、從 Hello, World! 到 AI 應用

回想起 Day 1,我們寫下的第一行程式碼 print("Hello, World!"),彷彿還在昨天。而 30 天後的今天,你已經是一位能夠親手打造 AI 聊天 App 的開發者了。

這趟旅程並不容易,但我們一起走過了:

  • 第一週:我們從 Swift 的 基礎語法 開始,認識了變數、常數、可選型別,並掌握了 ArraySetDictionary 等強大的 集合工具
  • 第二週:我們深入了程式的核心邏輯,學習了函式、閉包、協定,並理解了 structclass 之間最重要的 值型別 vs. 參考型別 之戰。
  • 第三週:我們告別了 Playground,正式踏入 Xcode 的世界,學會了建立專案、用 Xib 設計畫面、拉 IBOutletIBAction,並攻克了 Auto Layout 這個大魔王。
  • 第四週:我們進入了 專案實戰,從 TableView 的進階應用,到 MVC 架構的導入,最終在 Gemini 專案中,將所有知識融會貫通。

每一步,都是你努力的證明。

二、我的心路歷程與感謝

初衷:一場與夥伴的約定,一場對自己的挑戰
當初是與實驗室的夥伴們一同參賽,主要是想挑戰自我。由於過去沒有撰寫過教學文章的經驗,我希望能將自己在學習 Swift 語言過程中遇到的各種問題,以初學者的角度整理與分享,讓讀者能從中獲得實用的知識與啟發。同時,也期盼藉由撰寫與反思的過程,讓自己在 Swift 方面更加精進。

困難與成長:在雕琢文字中,重新認識知識
在撰寫的過程中,我認為最大的挑戰是「文章的修飾」。第一次動筆時,往往只用最直接、簡潔的方式敘述,但後來發現這樣的表達可能會讓讀者難以完全理解。於是我學會重新檢視整篇文章,思考如何將內容結構化、條理化,並以更淺顯的語句讓複雜的觀念變得易懂。這個過程不僅提升了我的表達能力,也讓我更了解「教學」的本質。

最大的收穫,是我在撰寫文章的過程中獲得了實質的成長。過去一些模糊或不熟悉的程式概念,因為需要清楚地寫出來而被迫重新學習與釐清。每完成一篇文章,就像重新整理一次自己的學習脈絡。

最後的感謝:這段旅程,因為有你們而完整
最後,誠摯感謝實驗室的學長姊與夥伴們,一路以來互相提醒、鼓勵與陪伴。即使在連假期間,也會提醒尚未發文的成員不要忘記進度。也感謝 IT 邦幫忙平台提供交流與分享的舞台,讓我能在此成長、被看見。謝謝每一位支持與閱讀的朋友,感謝你們一路的陪伴,我們明年再見!

結語:這不是終點,而是起點

30 天的鐵人賽即將劃下句點,但你作為一名 iOS 開發者的旅程,現在才正要精彩地開始!

我衷心希望這個系列能為你的 Swift 與 iOS 開發之路,打下一個穩固的基礎。接下來,你可以繼續探索更廣闊的世界,例如:

  • SwiftUI:Apple 新一代的 UI 框架,用更現代、更聲明式的方式打造畫面。
  • Concurrency:學習 Swift 強大的 async/await,優雅地處理非同步任務。
  • 資料持久化:深入研究 Core DataSwiftData,打造能離線使用的 App。

學習程式是一場永無止境的冒險,願你保持好奇、享受過程。

感謝大家 30 天的陪伴,我們江湖再見!

我是 Melodia,這是我的第一場 iT 邦幫忙鐵人賽,成功完賽!


上一篇
Day 29|Xcode 專案實戰:打造 Gemini AI 聊天室!(三)
系列文
Swift iOS 開發新手村:從入門到 AI 聊天室30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言