首页 > 解决方案 > 不能为 Swift 使用 Cache 库的 HybridCache

问题描述

我为我的应用程序使用了 Swift 缓存库的 HybridCache。我将缓存库 2.2.2 更新为 5.2.0。然后我得到一个错误。这是 HybridCache 的错误消息

 Use of unresolved identifier 'HybridCache'

这是代码

fileprivate let cache = HybridCache(name: "ReadGirl.JSONCache") 

我找到了 HybridCache 的文章。 https://github.com/hyperoslo/Cache/issues/150

我把代码改成了这个。

    let diskConfig = DiskConfig(name: "ReadGirl.JSONCache")
    let memoryConfig = MemoryConfig(expiry: .never, countLimit: 10, totalCostLimit: 10)
    fileprivate let cache = try? Storage(
        diskConfig: diskConfig,  // Error
        memoryConfig: memoryConfig
    )

但我收到另一条“diskConfig”错误消息。这是消息。

Cannot use instance member 'diskConfig' within property initializer; property initializers run before 'self' is available

我必须使用一些功能来存储吗?

标签: swiftcaching

解决方案


您正在传递其他实例变量,diskConfigmemoryConfig传递给 的初始化程序cache,但由于所有属性都是同时初始化的,所以这是不可能的。但是,您可以标记cachelazy,这意味着它只会在第一次访问时被评估。第一次访问只能在封闭实例已经初始化之后发生,因此使用lazy属性初始化器中的另一个实例变量是安全的。

let diskConfig = DiskConfig(name: "ReadGirl.JSONCache")
let memoryConfig = MemoryConfig(expiry: .never, countLimit: 10, totalCostLimit: 10)
fileprivate lazy var cache = try? Storage(
    diskConfig: diskConfig,
    memoryConfig: memoryConfig,
    transformer: TransformerFactory.forData()
)

如果您不需要访问diskConfigmemoryConfig从变量外部访问,另一种可能的解决方案cache是将它们直接传递给初始化程序,而不是将其存储为实例变量。

fileprivate let cache = try? Storage(
    diskConfig: DiskConfig(name: "ReadGirl.JSONCache"),
    memoryConfig: MemoryConfig(expiry: .never, countLimit: 10, totalCostLimit: 10),
    transformer: TransformerFactory.forData()
)

推荐阅读