Не могу использовать библиотеку HybridCache of Cache для Swift - PullRequest
1 голос
/ 02 апреля 2019

Я использовал HybridCache of Cache Library для Swift для своего приложения. Я обновил Cache Library 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 голосов
/ 02 апреля 2019

Вы передаете другие переменные экземпляра, 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()
)
...