首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift 4在UITableView中正确显示来自api的图像

Swift 4在UITableView中正确显示来自api的图像
EN

Stack Overflow用户
提问于 2018-08-19 09:36:00
回答 2查看 970关注 0票数 1

我使用UITableViewController显示来自web服务的项目列表,这些项目具有图像,我使用AlamofireImage从图像中获取数据并将其显示在UITableViewCell中,如下所示:

代码语言:javascript
运行
复制
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "postsCell", for: indexPath) as! PostsCell

        let imgUrl = URL(string:"http://example.com/uploads/" + (self.array[indexPath.row]["cover"] as! String))

        cell.delegate = self

        Alamofire.request(imgUrl!).responseImage { response in
            DispatchQueue.main.async {
                if let image = response.result.value {
                    cell.message?.text = (self.array[indexPath.row]["title"] as! String)
                    cell.subMessage?.text = (self.array[indexPath.row]["username"] as! String)
                    cell.profileImage?.image = image

                }
            }
        }

        return cell
    }

下面是我如何填充self.array

代码语言:javascript
运行
复制
getPosts(username: self.username!) { result in

            self.array = result
            self.tableView.reloadData()

        }

下面是getPosts:

代码语言:javascript
运行
复制
func getPosts(username: String, completionHandler:@escaping (_ result:Array<Dictionary<String, Any>>) -> Void)
    {
        var returnedResults = Array<Dictionary<String, Any>>()

        APIController().getUsersPosts(username: username)
        {
            (result: Array<Dictionary<String, Any>>) in

            DispatchQueue.main.async {

                //Return our results

                returnedResults = result
                completionHandler(returnedResults)

            }
        }
    }

下面是我对api的调用

代码语言:javascript
运行
复制
func getPosts(username: String, completion: @escaping (_ result: Array<Dictionary<String, Any>>) -> Void)
    {

        let parameters: Parameters = [
            "username": username
        ]

        Alamofire.request(webservice + "?action=posts", method: HTTPMethod.post, parameters: parameters, encoding: URLEncoding.httpBody, headers: [:]).responseJSON { response in

            if(response.error == nil)
            {
                if let result = response.result.value {

                    let jsonData = result as! Array<Dictionary<String, Any>>

                    completion(jsonData)

                }
            }

        }
    }

我的问题是,有没有一种更好、更有效的方式来显示来自URL的图像?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-19 13:23:12

您可以使用SDWebImage,它为您的应用程序维护图像缓存,

您可以通过以下方式使用它:

代码语言:javascript
运行
复制
import SDWebImage

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

    let imgUrl = URL(string:"http://example.com/uploads/" + (self.array[indexPath.row]["cover"] as! String))

    cell.profileImage.sd_setImage(with: imgUrl, placeholderImage: UIImage(named: "placeholder.png"))

    // REST OF YOUR CODE TO FILL OTHE DATA OF YOUR CELL
    return cell
}

你可以参考下面的git链接了解更多信息:https://github.com/rs/SDWebImage

票数 3
EN

Stack Overflow用户

发布于 2018-08-19 13:18:24

不需要编写responseImage completionHandler,您可以执行如下操作:

代码语言:javascript
运行
复制
cell.profileImage?.af_setImage(withURL: imgUrl) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51913779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档