无法为Swift使用Cache库的HybridCache

时间:2019-04-02 12:52:32

标签: swift caching

我为我的应用程序使用了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

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

1 个答案:

答案 0 :(得分:0)

您正在将其他实例变量diskConfigmemoryConfig传递给cache的初始化程序,但是由于所有属性都同时被初始化,所以这是不可能的。但是,您可以将cache标记为lazy,这意味着它将仅在首次访问时进行评估。第一次访问只能在封闭的实例已经初始化之后发生,因此可以使用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()
)

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

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