SwiftData Basics 极简入门
SwiftData 真的好简单,不过话说 iOS 17 苹果推出的很多属性包装器真的很像Java里的注解。
请使用Xcode15
运行
模型定义
import Foundation
import SwiftData
@Model // 真的太像注解了
class DataItem:Identifiable {
var id:String
var name:String
init(name: String) {
self.id = UUID().uuidString
self.name = name
}
}
模型引入
import SwiftUI
import SwiftData
@main
struct SwiftDataDemoApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(for:DataItem.self)// 这里和Environment变量的使用方式也非常类似
}
}
模型使用
import SwiftUI
import SwiftData
struct ContentView: View {
@Environment(\.modelContext) private var context // 上下文
@Query private var items:[DataItem] // 查询
var body: some View {
VStack {
Text("Tag on this button to add data")
Button("Add an item"){
addItem()
}
List{
ForEach(items) { item in
HStack{
Text(item.name)
Spacer()
Button(action: {
updateItem(item)
}, label: {
Image(systemName: "arrow.counterclockwise.circle")
})
}
}
.onDelete(perform: { indexSet in
for index in indexSet {
deleteItem(items[index])
}
})
}
}
.padding()
}
func addItem() {
let item = DataItem(name: "Test item")
context.insert(item) // 增加
}
func deleteItem(_ item:DataItem){
context.delete(item) // 删除
}
func updateItem(_ item:DataItem){
item.name = "Update Test item"
try? context.save() // 修改保存
}
}
#Preview {
ContentView()
}