为什么 Apple 创建一个单例结构并将其传递给环境?

问题描述 投票:0回答:2

当您使用 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
会被创建为单例。环境是否不足以将单例保留在内存中?而且,通过使用共享选项是否可以轻松访问单例而不需要将其传递到环境?

swiftui struct singleton
2个回答
1
投票

如果您不愿意,则不必注入它,但有一些不明显的用途

@Environment(\.managedObjectContext) var managedObjectContext

比如

@FetchRequest

如果您愿意,可以省略,具体取决于您的代码库,您会遇到崩溃,表明它丢失。

Apple 使用单例,因为它可以防止商店被多次加载。


0
投票

这样您就可以在预览环境中使用预览单例,而无需更改视图代码。

© www.soinside.com 2019 - 2024. All rights reserved.