如何使用SDWebImage在tableview中显示图片Swift?

How to use SDWebImage to show images in tableview Swift?

我正在尝试从响应 json 中抓取图像 url 并在我的 table 视图中显示该图像。 但问题是 tableview 为所有 tableview 单元格显示相同的图像。 这是我的table查看代码:

enterfunc tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return array_product_name.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? CellTableViewCell
    
    cell?.productName.text = array_product_name[indexPath.row]
    cell?.productPrice.text = array_product_price[indexPath.row]
    let imageU = UserDefaults.standard.string(forKey: "url")
    cell?.productImageLbl.sd_setImage(with: URL(string: imageU!))
    return cell!
}

我面临的问题是,它为所有 table 视图单元格打印相同的图像。

这是我的 Alamofire 代码:

Alamofire.request("http://192.168.80.21:3204/api/product/get_all_products", headers: headers).responseJSON { [self]
        response in
   
        switch response.result {
        case .success:
            
            let myresponse = try? JSON(data: response.data!)
            print("hello\(myresponse as Any)")
            
            let resultArray = myresponse
            self.array_product_name.removeAll()
            
            for i in resultArray!.arrayValue{
                let product_name = i["product_name"].stringValue
                self.array_product_name.append(product_name)
                
                let product_price = i["price"].stringValue
                self.array_product_price.append(product_price)
                
                let product_des = i["description"].stringValue
                self.array_product_description.append(product_des)
                
                let product_comName = i["company_name"].stringValue
                self.array_product_compamnyName.append(product_comName)
                
                let product_image  = i["image_url"].stringValue
                self.array_product_image.append(product_image)
                
                self.image_array = product_image
                print("Test1:- \(self.image_array)")
                UserDefaults.standard.setValue(image_array, forKey: "url")
            }
            
        case .failure(_):
            print(Error.self)
        }
        self.tableView.reloadData()
    }

您只保存最后一个值数组 url 图像形式数组值 resultArray。 如果要保存数组 url 图片,可以使用:

  let defaults = UserDefaults.standard
  defaults.set(array, forKey: "SavedUrlStringArray")

在表格视图中:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

   let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? CellTableViewCell
       cell?.productName.text = array_product_name[indexPath.row]
       cell?.productPrice.text = array_product_price[indexPath.row]

       let defaults = UserDefaults.standard
       let arrayImage = defaults.stringArray(forKey: "SavedUrlStringArray") ?? [String]()
     
       cell?.productImageLbl.sd_setImage(with: URL(string: arrayImage[indexPath.row]))
       return cell!
 }

不过你也可以使用“array_product_image”,不需要用userdefault保存数组值。

Alamofire.request("http://192.168.80.21:3204/api/product/get_all_products", headers: headers).responseJSON { [self]
    response in

    switch response.result {
    case .success:
        
        let myresponse = try? JSON(data: response.data!)
        print("hello\(myresponse as Any)")
        
        let resultArray = myresponse
        self.array_product_name.removeAll()
        
        for i in resultArray!.arrayValue{
            let product_name = i["product_name"].stringValue
            self.array_product_name.append(product_name)
            
            let product_price = i["price"].stringValue
            self.array_product_price.append(product_price)
            
            let product_des = i["description"].stringValue
            self.array_product_description.append(product_des)
            
            let product_comName = i["company_name"].stringValue
            self.array_product_compamnyName.append(product_comName)
            
            let product_image  = i["image_url"].stringValue
            self.array_product_image.append(product_image)
        }
         self.tableView.reloadData()
    case .failure(_):
        print(Error.self)
    }
}


 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return array_product_name.count
}

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? CellTableViewCell

    cell?.productName.text = array_product_name[indexPath.row]
    cell?.productPrice.text = array_product_price[indexPath.row]
    cell?.productImageLbl.sd_setImage(with: URL(string: array_product_image[indexPath.row]))
    return cell!
}