swift - 不能为 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
我必须使用一些功能来存储吗?
解决方案
您正在传递其他实例变量,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()
)
推荐阅读
- java - 重构——从特定接口到通用接口
- django - url 令牌身份验证无法对用户进行身份验证
- docker - 使用 cname 而不是名称服务器的 ip 地址运行 docker 容器 dns 标志
- javascript - 即使未履行承诺,承诺也会执行
- amazon-web-services - 我无法再连接到我的 aws 实例
- excel-formula - 在比较 Excel 中的日期之前确定位置
- javascript - 图片从ckeditor上传到laravel本地文件系统
- python - 如何在固定字符串周围找到匹配项
- python - 打印数据集中最大值的键
- git - 从 mercurial 迁移到 git 时存储 nodeid