我使用 SwiftData 存储了一些数据。我现在想在应用程序启动时加载此存储的数据并将其作为环境对象插入。
而不是每次需要时都调用 SwiftData。我宁愿在启动时加载一次并使其在所有视图中可用。
我已经尝试过以下方法。假设我已经创建了书籍的模型并且已经保存了一些数据。
import SwiftUI
import SwiftData
@main
struct BookwormApp: App {
init(){
@Query var books: [Book]
print("Loaded data: \(books)")
}
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(for: Book.self)
}
}
我也尝试过这个:
init(){
@Environment(\.modelContext) var modelContext
@Query var books: [Book]
print("Loaded data: \(books)")
}
您需要向
@Query
添加 ContentView
属性才能访问记录。创建视图时,SwiftData 将自动处理数据访问。
@main
struct BookwormApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(for: Book.self)
}
}
struct ContentView: View {
@Query var books: [Book]
var body: some View {
ScrollView {
List(books) { book in
// Text("Book \(book.name)")
}
}
}
}
一般来说,您会希望避免使用 SwiftUI 的 init 块。最好使用默认构造函数。我不确定 init 中的
@Query
或 @Environment
是否有效,但这肯定不会为您提供您正在寻找的功能。