如何正确管理JSON提供的图像

时间:2018-07-17 21:10:57

标签: ios arrays json swift alamofire

我正在尝试解析由我的App上下载的JSON提供的所有图像。因此,我听说过许多正确执行此操作的方法。我应该使用哪个API在我的应用程序上管理图像?我应该如何做,我可以举个例子吗?

我还想正确处理以下之间的延迟:

运行应用程序->加载数据->填充UI元素

我应该怎么做才能最大程度地减少这种延迟,我认为专业的应用程序应该花这么长时间来加载所有组件。

这就是我要在UITableView中填充图片的部分。

var arrCerveja = [Cerveja]()

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    @IBOutlet weak var tableView: UITableView!

    //TableView DataSource
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrCerveja.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cellID") as! TableViewCell

        let model = arrCerveja[indexPath.row]

            cell.labelName.text = model.name
            cell.labelDetail.text = "\(model.abv)"
            cell. imageViewCell.image = ???? //How should I do that? 
        return cell
    }
    //TableView Delegate
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    }



    override func viewDidLoad() {
        super.viewDidLoad()
        getApiData { (cerveja) in
           arrCerveja = cerveja
           self.tableView.reloadData()
        }

    }

模型文件夹:

import Foundation
struct Cerveja:Decodable{
    let name:String
    let abv:Double
    let image_url:String
}

网络文件夹:

import Alamofire


func getApiData(completion: @escaping ([Cerveja]) -> ()){
    guard let urlString = URL(string: "https://api.punkapi.com/v2/beers") else {
        print("URL Error")
        return
    }
    Alamofire.request(urlString).responseJSON { response in

        if response.data == response.data{
            do{
                let decoder = try JSONDecoder().decode([Cerveja].self, from: response.data!)

                completion(decoder)
            }catch{
        print(error)
            }
        }else{print("API Response is Empty")}

        }
}

1 个答案:

答案 0 :(得分:0)

您可以做的是缓存下载的图像,有很多库可以帮助您完成操作,以下是其中一些列表:

Kingfisher是一个很好的工具,它还允许您下载图像并向您说明如何使用带表视图的库。 缓存图像还将减少下次打开应用程序时的加载时间。 您还可以使用this library在加载过程中向用户显示用户友好的加载情况。