You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Kingfisher实现离线加载:如何通过缓存键初始化KFImage

仅通过缓存键初始化KFImage实现离线加载

可行方案说明

已知缓存键(cacheKey)的情况下,直接从Kingfisher的ImageCache中读取缓存内容初始化KFImage,是离线场景下最可靠的解决方案——无需依赖Firebase的联网URL请求,直接调用本地缓存资源。

代码实现

修改你的SomeImage视图,通过缓存检查逻辑优先加载本地缓存:

import Kingfisher
import SwiftUI

struct SomeImage: View {
    let cacheKey: String
    let id: String
    let folder: String
    @State private var cachedImage: UIImage?
    @State private var url: URL?

    private func placeholder() -> some View {
        // 自定义占位视图
        Color.gray
    }

    var body: some View {
        Group {
            if let cachedImage = cachedImage {
                // 直接用缓存图片初始化KFImage
                KFImage(ImageResource(image: cachedImage))
                    .resizable()
                    .fade(duration: 0.25)
            } else if let url = url {
                // 缓存不存在时,通过URL加载并缓存
                KFImage.url(url, cacheKey: cacheKey)
                    .diskCacheExpiration(.days(14))
                    .resizable()
                    .fade(duration: 0.25)
                    .placeholder { placeholder() }
            } else {
                placeholder()
            }
        }
        .task {
            let cache = ImageCache.default
            // 优先从缓存读取
            if let cachedData = cache.retrieveImageData(forKey: cacheKey),
               let image = UIImage(data: cachedData) {
                cachedImage = image
            } else {
                // 缓存为空时联网获取URL
                MediaManager.shared.generateURL(id: id, folder: folder) { downloadURL in
                    url = downloadURL
                }
            }
        }
    }
}

关键细节

  • ImageCache.default.retrieveImageData(forKey:):直接从磁盘/内存缓存读取图片数据,全程无需联网,适配离线场景。
  • KFImage(ImageResource(image: cachedImage)):绕过URL请求逻辑,直接加载本地缓存的图片实例,避免离线时URL不可用的问题。
  • 原有URL加载逻辑作为缓存不存在时的备选,保证在线状态下能正常更新缓存。

内容的提问来源于stack exchange,提问作者IT-Guy007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:42:40