iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
生成式 AI

iOS? AI-Yes!:用 Vide Coding 加速我的 Swift 學習曲線系列 第 9

Day 9 - 數據儲存:認識 RealmSwift,為之後的專案做準備

  • 分享至 

  • xImage
  •  

昨天,我們規劃好了 App 內部畫面的 Delegate 。但這樣又有新的問題:當「新增鬧鐘」畫面,將一個新的鬧鐘資訊回報給列表畫面後,這個鬧鐘該被存放在哪裡?

我們不能只把它存在一個暫時的變數裡,因為那樣 App 一關閉,所有的鬧鐘就都消失了。我們需要一個可以一直存放的空間,這樣App關閉後,資料還會存在。


為何需要資料庫?

  • 困惑點:能不能把資料存成一個文字檔?我也聽過很多名詞,像 Apple 自家的 Core Data、SQLite,還有 Realm... 對於一個新手,該如何選擇?

  • AI 協作

    • 我的 Prompt:我是一個 iOS 新手,需要為我的 App 儲存一些自定義的物件(例如鬧鐘)。請簡單比較 Core Data,SQLite 和 Realm 這三種儲存方式的優缺點,並給我一個新手入門的建議。

    AI 的回答:

    您好!身為 iOS 開發新手,選擇一個合適的資料儲存方案是非常重要的一步。針對您的需求——儲存自定義物件(如鬧鐘),比較 Core Data、SQLite 和 Realm 是非常經典的議題。

    這三者代表了三種不同的抽象層級和開發哲學。以下我將為您詳細比較,並提供一個明確的新手入門建議。


    優缺點分析

    1. Core Data

    • 想像它:像是 Apple 提供的一套全自動的倉儲管理系統。你只需要告訴系統你的「貨物(物件)」長什麼樣子,系統就會幫你處理進貨、出貨和庫存管理,但這套系統的操作手冊非常厚重。
    • 優點:作為 Apple 的親兒子,它與作業系統的整合無懈可擊,特別是在處理 iCloud 同步這類複雜功能時。
    • 缺點:對於新手來說,光是理解它的所有組件和運作原理就要花費大量時間,很容易在初期就感到挫折。

    2. SQLite

    • 想像它:像是一個空倉庫和一本 SQL 語法書。你需要親自設計貨架(CREATE TABLE)、親手將貨物一件件擺上架(INSERT),並記下它們的位置,取貨時也要自己去翻找(SELECT)。
    • 優點:給予你最大的自由度和控制力。全世界的開發者都懂 SQL,它是個通用的技能。
    • 缺點:對於儲存「鬧鐘」這樣的物件,你需要手動把鬧鐘物件的各個屬性(時間、鈴聲、標籤)拆開,存入資料表的欄位中,讀取時再自己組合回物件。這個過程非常繁瑣且容易出錯。

    3. Realm

    • 想像它:像是一個專為現代化物流設計的智慧倉儲。你只需要定義好「鬧鐘」這個物件,Realm 就會自動幫你建立專屬的儲存空間。存取物件就像操作一個普通的 Swift class 一樣簡單直觀。
    • 優點:API 設計非常友好,讓你感覺不像在操作資料庫,而是在操作 Swift 物件。它的「即時物件」特性意味著你查詢到的資料會自動更新,這在刷新 UI 時非常方便。
    • 缺點:它是一個第三方框架,意味著你的專案會依賴它。但現今透過 Swift Package Manager (SPM) 管理依賴非常方便,這已不是一個大問題。

    給新手的入門建議

    結論先行:對於新手,我強烈推薦從 Realm 開始。

    理由如下:

    1. 學習曲線最平緩:您可以在最短的時間內學會如何儲存、讀取、更新和刪除您的自定義物件,從而將更多精力專注在 App 的功能和 UI 開發上。
    2. 程式碼更簡潔:相較於 Core Data 的大量設定和 SQLite 的手動 SQL,Realm 的程式碼非常直觀,大幅減少了樣板程式碼。
    3. 成就感更高:快速看到成果是學習程式設計時保持動力的關鍵。Realm 能讓您很快地實現物件儲存功能,帶來正向的反饋。

    當您的 App 變得非常複雜,或需要與 Apple 生態系(如 iCloud)進行深度整合時,再回頭學習 Core Data 也不遲。屆時您已經有了資料庫操作的經驗,學習起來會更容易。

三個方案的比較表格(可以左右滑動)

特性 / 方案 Core Data SQLite Realm
基本概念 Apple 官方的物件圖譜管理框架 (Object Graph Management Framework) 一個輕量級的關聯式資料庫引擎 (SQL Database Engine) 一個專為行動裝置設計的物件資料庫 (Object Database)
抽象層級 高層級:操作 Swift/Objective-C 物件,框架會自動將其轉換並儲存。 低層級:直接編寫 SQL 語法來操作資料表 (Table) 與資料列 (Row)。 高層級:直接操作原生 Swift 物件,API 設計非常現代化。
上手難度 :概念複雜(例如 NSManagedObjectContext, NSPersistentStoreCoordinator),樣板程式碼 (Boilerplate) 較多。 :需要熟悉 SQL 語法。在 Swift 中通常需要搭配第三方函式庫 (如 GRDB.swift, FMDB) 來簡化操作,否則會很繁瑣。 :API 直觀易用,文件清晰,學習曲線最平緩。
與 Swift 整合度 良好:與 Xcode 編輯器深度整合,但 API 有時感覺不夠 "Swifty"。 :原生是 C 語言 API。必須透過 Wrapper 函式庫才能與 Swift 良好協作。 極佳:API 設計完全遵循 Swift 風格,大量使用 Swift 的現代特性。
主要優點 1. Apple 原生,穩定性高。2. 與 iCloud 等系統服務整合度最高。3. 功能強大,適合處理複雜的物件關係。 1. 完全的控制權,可進行極致的效能優化。2. 跨平台標準,通用性強。3. 非常輕量。 1. 極易上手,開發速度快。2. 效能非常優異。3. 即時物件 (Live Objects) 特性,資料變更時 UI 可自動更新。
主要缺點 1. 學習曲線陡峭,對新手不友善。2. 除錯和多線程處理較複雜。 1. 需要手動編寫 SQL。2. 需要自行處理物件與資料庫表格之間的轉換 (ORM)。3. 樣板程式碼繁瑣。 1. 屬於第三方函式庫,需額外整合。2. 資料庫檔案 (.realm) 有其專屬格式,不易從外部直接讀取。
  • 根據AI的解釋,我們應該選擇Realm來當作我們鬧鐘存放資料的地方,既符合學習時間成本,也非常方便!

安裝我們的第一個「外部工具」:Swift Package Manager (SPM)

我發現 Xcode 內建了一個很棒的工具叫做 Swift Package Manager (SPM),讓安裝外部工具這件事變得非常簡單。

我的安裝步驟

  1. 在 Xcode 中,點擊頂部選單的 FileAdd Packages Dependencies...

    image

  2. 在右上角的搜尋框中,貼上 RealmSwift 的官方 GitHub 網址:

    https://github.com/realm/realm-swift.git
    
  3. Xcode 會自動找到這個套件。我保持預設的 Dependency Rule (Up to Next Major Version),然後點擊 Add Package

    image

  4. 在下一個視窗中,確認 RealmRealmSwift 這兩個 Package Product 都有被勾選,並加入到我的 App Target 中。

    image

  5. 再次點擊 Add Package

    等待 Xcode 下載完成後,會看到左邊的專案導覽器多了一個「Package Dependencies」的區塊,裡面出現了 Realm。

    image


今天,我們完成了一項至關重要的基礎建設。我們理解了為 App 選擇一個合適儲存倉庫的重要性,並透過 Swift Package Manager,成功地將強大的 RealmSwift 資料庫整合進了我們的專案。


上一篇
Day 8 - 承先啟後:為何在深入 AI 前,我們必須先征服 App 內部溝通的核心?
下一篇
Day 10 - 【鬧鐘實戰 I】打好地基:專案設定、Realm 模型與 App 框架
系列文
iOS? AI-Yes!:用 Vide Coding 加速我的 Swift 學習曲線11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言