赞
踩
故名思义,是用swift写的用来实现存储的一个原生库,(当然,大多数用swift写,也有用C写的)
先上代码,后解释
1. 对于model,首先添加swiftData引用,然后使用@Model就OK啦,这样完成model的持久化设置啦
import Foundation
import SwiftData
@Model
final class Card {
var front: String
var back: String
var creationDate: Date
init(front: String, back: String, creationDate: Date = .now) {
self.front = front
self.back = back
self.creationDate = creationDate
}
}
2. 对于app,只需要添加.modelContainer,告诉app,要缓存谁的堆栈,就OK啦
import SwiftUI
@main
struct swiftDataDemoApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(for: Card.self)
}
}
3. 对于需要使用model的View,如下操作
import SwiftUI import SwiftData struct ContentView: View { @Query private var cards: [Card] // 1. 使用Query来修饰model @Environment(\.modelContext) private var modelContext // 2. 用modelContext来增删改查 var body: some View { VStack { ForEach(cards) { card in Text(card.front) } Button { let newCard = Card(front: "Sample Front", back: "Sample Back") // save card modelContext.insert(newCard) } label: { Text("Add Data") } } } }
------开始解释------
使用的时候,只需两步,就完成持久化操作了。
swiftData将值类属性转换为表类属性
支持基础类属性,int,float,string
也包含更多复杂的值类型:enum,struct,codable,Collections of value types
将引用类型表述为关系
Model之间,和模型的集合
@Model 将修改你model上的全部属性,你可以使用属性上的元数据来影响swiftData,@Model 可以修改你的model的存储属性来帮助ModelContext自动追踪你的更改,并将他们纳入下一次保存操作中
@Attribute来添加唯一约束
@Relationship来控制反演选项,并详细说明删除传播规则
这改变了模型间链接的行为
@Transient 指定删除属性
更多请查看Model your schema with swiftData
你可以仅通过指定想要存储的建模类型列表来创建Model Container
MContext 用来获取和保存数据
modelContext监控着模型中的所有变动,并提供一系列操作动作,tracking,fetching,saving,undoing
在试图层次结构外,你可以要求模型容器提供一个与Main Actor绑定的上下文,即 contain.mainContext
或者 你可以准对给定模型容器实例化新上下文,ModelContext(container)
Predicate 是iOS17中的新功能, 它采用swift原生类型并使用swift宏进行强类型构建,它经由完全类型检查,可以视作现代NSPredicate的替代品
Swift 原生类型是啥??和keypath
FETCHDESCRIPTOR 提供多种途径来进行定制化SwiftData查询,除了判断条件和排序,你可以指定相关对象进行预抓取,限制结束计数以及从结果中排出未保存的更改等操作
swiftData通过ModelContext驱动这些操作,Insert,delete,save,change
请查看Dive deeper into SwiftData
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。