Can';t将缓存库的HybridCache用于Swift
我在我的应用程序中使用了Swift缓存库的HybridCache。 我将缓存库2.2.2更新为5.2.0。 然后我犯了一个错误。 这是HybridCache的错误消息Can';t将缓存库的HybridCache用于Swift,swift,caching,Swift,Caching,我在我的应用程序中使用了Swift缓存库的HybridCache。 我将缓存库2.2.2更新为5.2.0。 然后我犯了一个错误。 这是HybridCache的错误消息 Use of unresolved identifier 'HybridCache' 这是密码 fileprivate let cache = HybridCache(name: "ReadGirl.JSONCache") 我找到了HybridCache的文章。 我把密码改成了这个 let diskConfig
Use of unresolved identifier 'HybridCache'
这是密码
fileprivate let cache = HybridCache(name: "ReadGirl.JSONCache")
我找到了HybridCache的文章。
我把密码改成了这个
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
我必须使用一些函数来存储吗?您正在将其他实例变量、
diskConfig
和memoryConfig
传递给cache
的初始值设定项,但由于所有属性都是同时初始化的,因此这是不可能的。但是,您可以将缓存
标记为惰性
,这意味着只有在第一次访问它时才会对其进行评估。第一次访问只能在封闭实例已经初始化之后发生,因此可以安全地使用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()
)
如果您不需要从cache
变量外部访问diskConfig
或memoryConfig
,另一种可能的解决方案是直接将它们传递到初始值设定项中,而不是将其存储为实例变量
fileprivate let cache = try? Storage(
diskConfig: DiskConfig(name: "ReadGirl.JSONCache"),
memoryConfig: MemoryConfig(expiry: .never, countLimit: 10, totalCostLimit: 10),
transformer: TransformerFactory.forData()
)
您正在将其他实例变量,
diskConfig
和memoryConfig
传递给cache
的初始值设定项,但由于所有属性都是同时初始化的,因此这是不可能的。但是,您可以将缓存
标记为惰性
,这意味着只有在第一次访问它时才会对其进行评估。第一次访问只能在封闭实例已经初始化之后发生,因此可以安全地使用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()
)
如果您不需要从cache
变量外部访问diskConfig
或memoryConfig
,另一种可能的解决方案是直接将它们传递到初始值设定项中,而不是将其存储为实例变量
fileprivate let cache = try? Storage(
diskConfig: DiskConfig(name: "ReadGirl.JSONCache"),
memoryConfig: MemoryConfig(expiry: .never, countLimit: 10, totalCostLimit: 10),
transformer: TransformerFactory.forData()
)
谢谢你的解决方案。我尝试了
Lazy
并进入了初始值设定项。我认为,这是有道理的。但是,我还有另外一个错误。首先,我尝试了Lazy
。它使此消息“无法使用类型为”(diskConfig:diskConfig,memoryConfig:memoryConfig)的参数列表调用类型“Storage”的初始值设定项”,并使初始值设定项生成此消息,“表达式的类型在没有更多上下文的情况下不明确”diskConfig是struct。struct是否有某种类型?@NoriyasuKatano检查我的更新答案,存储
初始值设定项似乎在GitHub问题创建后已更新。您可能需要根据需要修改transformer
输入参数的值cache@NoriyasuKatano很高兴我能帮忙。如果您觉得我的答案有用,请在答案旁边用勾号将其标记为已接受的答案。谢谢您的解决方案。我尝试了Lazy
并进入了初始值设定项。我认为,这是有道理的。但是,我还有另外一个错误。首先,我尝试了Lazy
。它使此消息“无法使用类型为”(diskConfig:diskConfig,memoryConfig:memoryConfig)的参数列表调用类型“Storage”的初始值设定项”,并使初始值设定项生成此消息,“表达式的类型在没有更多上下文的情况下不明确”diskConfig是struct。struct是否有某种类型?@NoriyasuKatano检查我的更新答案,存储
初始值设定项似乎在GitHub问题创建后已更新。您可能需要根据需要修改transformer
输入参数的值cache@NoriyasuKatano很高兴我能帮忙。如果您觉得我的答案有用,请在答案旁边用勾号将其标记为已接受的答案。