swift 如何检查ModelContainer是否存储在Memory中

p4tfgftt  于 11个月前  发布在  Swift
关注(0)|答案(2)|浏览(81)

我想写这样的东西:

fileprivate var container: ModelContainer? = nil
func sharedModelContainer(inMemory: Bool) -> ModelContainer {
    if let result = container, result.isInMemory == inMemory {
        return result
    }

    let schema = Schema([
         ModelClass1.self ,ModelClass2.self, ModelClass3.self
    ])
    let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: inMemory)

    do {
        let result = try ModelContainer(for: schema, configurations: [modelConfiguration])
        DispatchQueue.main.async {
            result.mainContext.undoManager = UndoManager()
        }
        container = result
        return result
    } catch {
        fatalError("Could not create ModelContainer: \(error)")
    }
}

字符串
但我还没想好如何实施

extension ModelContainer {
    var isInMemory: Bool {
        ???
    }
}

mnemlml8

mnemlml81#

我相信你正在寻找类似以下的东西:

extension ModelContainer {
    var isInMemory: Bool {
        return configurations.contains(where: { $0.isStoredInMemoryOnly })
    }
}

字符串

mnemlml8

mnemlml82#

关于ModelConfiguration的文档并不清楚,如果一个模型容器存在多个配置,它们是如何处理的。
对于一个基本场景,当配置对象不超过一个时,

var isMemoryOnly: Bool {
    modelContainer.configurations.first!.isStoredInMemoryOnly
}

字符串
请注意强制解包,如果没有提供ModelConfiguration,似乎总是会为我们创建一个。
问题是当我们有多个配置时会发生什么,我还没有能够测试这是一个好方法,但我想我们必须有一个更高级的函数,我们需要为给定的PersistentModel类型(其他过滤器也是?)识别正确的ModelConfiguration,以从正确的示例读取属性。

相关问题