ImageCache swift 3

时间:2018-01-01 15:37:10

标签: ios json image caching swift3

嗨我想缓存来自json的图像。我已经制作了一个下载并解析json的networkService,我使用func downloadImage()来生成imageurl的http请求。然后我用这个func更新我的剧集但是图片仍然在滚动下载

    var episode: Product! {   
        didSet {

            self.updateUI()
        }
    }



let imageCache = NSCache<AnyObject, AnyObject>()

    func updateUI()
    {
        menuItemNameLabel?.text = episode.title
        ingredientsItemLabel?.text = episode.summary
        priceItemLabel?.text = episode.price
        menuItemImageView?.image = UIImage(named: "Koulourades")

        if let thumbnailURL = episode.thumbnailURL {
            let networkService = NetworkService(url: thumbnailURL)
            networkService.downloadImage({ (imageData) in


                if let imageFromCache = self.imageCache.object(forKey: self.episode.thumbnailURL as AnyObject) as? UIImage {

                    DispatchQueue.main.async(execute: {
                         self.menuItemImageView?.image = imageFromCache
                         return
                    })
                }


               DispatchQueue.main.async(execute: {
                    let imageToCache = UIImage(data: imageData as Data)
                    self.imageCache.setObject(imageToCache!, forKey: self.episode.thumbnailURL as AnyObject)

                    self.menuItemImageView?.image = imageToCache
                })


            })
        }
    }//--end updateUI()

1 个答案:

答案 0 :(得分:0)

您需要解决问题的方式称为延迟加载,应用程序将立即下载图像并将其缓存到内存中。

有多个第三方库可用于缓存图像。

图书馆,

1)HanekeSwift - &gt; https://github.com/Haneke/HanekeSwift

2)翠鸟 - &gt; https://github.com/onevcat/Kingfisher

3)SDWebImage - &gt; https://github.com/rs/SDWebImage

4)AlamofireImage - &gt; https://github.com/Alamofire/AlamofireImage