我为我的应用程序使用了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
我必须使用某些功能来存储吗?
答案 0 :(得分:0)
您正在将其他实例变量diskConfig
和memoryConfig
传递给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
变量外部访问memoryConfig
或cache
,另一种可能的解决方案是将它们直接传递给初始化程序,而不是将其存储为实例。变量。
fileprivate let cache = try? Storage(
diskConfig: DiskConfig(name: "ReadGirl.JSONCache"),
memoryConfig: MemoryConfig(expiry: .never, countLimit: 10, totalCostLimit: 10),
transformer: TransformerFactory.forData()
)