iT邦幫忙

2024 iThome 鐵人賽

DAY 5
1

前言

昨天介紹完 MVVM 後 今天終於要來實作 SwiftData
那開啟專案後是不是發現多了 ItemContentView 然後裡面都已經寫了一些程式碼了

那是因為一開始我們在創建專案時有特別勾選 SwiftData ,因此系統就會自動幫你生成一個 SwiftData 的範例程式。

Model

首先我們看到 Item 裡面有下程式碼,然後這邊各位應該有看到有一個 @Macro
https://ithelp.ithome.com.tw/upload/images/20240904/20161845y2w2NrJCGf.png

什麼是 Macro

Macro (巨集) 是Swift程式語言中的一個強大功能,它允許開發者在編譯時期生成程式碼。
減少了開發者手動編寫重複程式碼的麻煩,在編譯過程,Swift會先展開程式碼中的巨集,並且依一般程序建置程式碼。
接下來當我們對這個 Macro點右鍵時可以看到一個 Expand Macro
https://ithelp.ithome.com.tw/upload/images/20240904/20161845RR7xMrgRov.png

點擊後各位應該會看到很不可思議的一幕,就是發現竟然多了這麼多的程式碼,然後應該會多看到兩個不同的 >Macro,然後再次點擊 Expand Macro 又會有下一層的 Macro出現。

這就是為什麼SwiftData 會比 CoreData 還要簡單使用的原因,因為 Macro 的使用大大簡化了開發者需要編寫的程式碼數量,同時也提高了程式碼的可讀性和維護性。

這邊想知道這些 Macro 的同學們在自己網路上找找答案喔

接下來我們在點擊右鍵 然後選擇 Hide Macro Expansion ,讓我們的介面可以乾淨一點。
https://ithelp.ithome.com.tw/upload/images/20240904/201618458xzOkmr4kL.png

然後我們說明一下 Item

這邊我們可以把它想成 Item 就是一個資料表,然後表裡面會有很多屬性,那這邊只有一個 timestamp 表示時間戳,最後因為是 class 的關係我們需要寫 init 做呼叫。

最後再看到 SwiftDataExampleApp

應該會看到裡面的程式碼有以下

var sharedModelContainer: ModelContainer = {
    let schema = Schema([
        Item.self,
    ])
    let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)

    do {
        return try ModelContainer(for: schema, configurations: [modelConfiguration])
    } catch {
        fatalError("Could not create ModelContainer: \(error)")
    }
}()

var body: some Scene {
    WindowGroup {
        ContentView()
    }
    .modelContainer(for: Item.self)
}

在上面的程式碼中有看到 modelConfiguration,是用於配置 SwiftData 如何管理和儲存資料模型的。
所以如果有需要的話才會特別在寫一個客製化的 ModelContainer 來做使用。

https://ithelp.ithome.com.tw/upload/images/20240905/20161845EbnuKnjkdb.png

那這次的介紹我們只要簡單的使用以下程式碼就好,透過以下我們可以理解成我的 App 要用到什麼的資料表,而我們只有創建一個叫做 Item,寫到這邊我們的 App 就可以成功使用 SwiftData 來儲存資料囉。

var body: some Scene {
    WindowGroup {
        ContentView()
    }
    .modelContainer(for: Item.self)
}

如果我想要使用2個以上的資料表的話可以使用 array 將要使用的模型 包起來就好囉

var body: some Scene {
    WindowGroup {
        ContentView()
    }
    .modelContainer(for: [Recipe.self, Ingredient.self])
}

上一篇
Day04 - 讓專案變成 MVVM 架構
下一篇
Day06 - SwiftData 的新增跟刪除
系列文
Xiang教你進階Swift從有到精30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言