iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
Mobile Development

從 SwiftUI 到 Apple Vision Pro - SwiftUI 從零開始系列 第 19

從 SwiftUI 到 Apple Vision Pro - SwiftUI 從零開始 Day19

  • 分享至 

  • xImage
  •  

Day19 SwiftData

以往如果要在iOS App資料庫來存取資料的話,通常會使用sqlite或者iOS內建的CoreData,但是這兩個方式都非常複雜,使用上還要考慮同時寫入的問題等,所以在iOS17提供一個全新的資料庫方法,稱為SwiftData。

SwiftData不用使用特定資料庫檔案來建置資料庫,直接使用程式碼方式來建構,例如:

final class User {
    var name: String
    var email: String
    
    init(name: String, email: String) {
        self.name = name
        self.email = email
    }
}

使用類別來建置SwiftData資料表,使用變數來建置資料欄位,並且使用init方式來初始化變數。

接下來匯入SwiftData:

import SwiftData

然後將這個類別定義為SwiftData,例如:

@Model
final class User {
    var name: String
    var email: String
    
    init(name: String, email: String) {
        self.name = name
        self.email = email
    }
}

修改專案的程式碼進入點:

WindowGroup {
    ContentView()
        .modelContainer(for: User.self)
}

將User類別加入到專案之內,表示整個專案都可以呼叫使用這個User類別。

接下來開始使用SwiftData,宣告一個變數modelContext,為環境變數狀態,與一個陣列來儲存User資料。

@Environment(\.modelContext) private var modelContext
@Query private var users: [User]

所以如果要存取這個User資料,可以使用List元件將陣列的資料全部顯示出來,例如:

List(users) { user in
    HStack {
        Text(user.name)
        Text(user.email)
    }
}

但因為SwiftData建立時,並沒有任何User的資料,所以上面這個顯示會時空白,必須要手動加入資料,才會顯示。

所以另外製作一個按鈕,當按下按鈕時,會新增資料到SwiftData內,例如:

Button(action: {
    let newUser = User(name: "Jake", email: "Jake@mail")
    modelContext.insert(newUser)
            
}, label: {
    Text("新增")
})

新增資料時,只要將User資料,用modelContext.insert指令加入即可。

如此一來,就會產生SwiftData內的User資料,即使下次重開App時,也會讀取資料,然後顯示出來,產生一個永久的儲存狀態了。

從 SwiftUI 到 Apple Vision Pro - SwiftUI 從零開始 Day19 [完]


上一篇
從 SwiftUI 到 Apple Vision Pro - SwiftUI 從零開始 Day18
下一篇
從 SwiftUI 到 Apple Vision Pro - SwiftUI 從零開始 Day20
系列文
從 SwiftUI 到 Apple Vision Pro - SwiftUI 從零開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言