当您使用 Core Data 创建应用程序时,Xcode 会创建一个名为 PersistenceController 的单例结构。
struct PersistenceController {
static let shared = PersistenceController()
static var preview: PersistenceController = {
let result = PersistenceController(inMemory: true)
let viewContext = result.container.viewContext
...
然后,当应用程序启动时,他们创建单例并将其传递给
.environment()
@main
struct MyApp: App {
let persistenceController = PersistenceController.shared
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistenceController.container.viewContext)
}
}
}
如果传递到环境中,为什么
PersistenceController
会被创建为单例。环境是否不足以将单例保留在内存中?而且,通过使用共享选项是否可以轻松访问单例而不需要将其传递到环境?
如果您不愿意,则不必注入它,但有一些不明显的用途
@Environment(\.managedObjectContext) var managedObjectContext
比如
@FetchRequest
如果您愿意,可以省略,具体取决于您的代码库,您会遇到崩溃,表明它丢失。
Apple 使用单例,因为它可以防止商店被多次加载。
这样您就可以在预览环境中使用预览单例,而无需更改视图代码。