美文网首页ios自带功能篇
Swift 通过URL加载图片

Swift 通过URL加载图片

作者: YYYYYY25 | 来源:发表于2018-06-29 16:48 被阅读62次
    一、前言

    现在项目中图片的请求一般都是用SDWebImage,但是在开发中经常需要我们前端先搭建UI,然后等后台接口写好之后再对接数据。那么在事先搭建UI的过程中往往会自己填充一些假数据。
    但是通过URL获取UIImage的操作在OC和Swift中有一些差异,这篇文章只是用来区分和记录一下。

    二、获取Data的思考

    在OC中,通过URL加载图片是一件非常简单的事情,但是之前有看过一个内存泄漏的问题:大概就是在子线程中通过URL加载数据,但是这个下载任务在后台出错了,所以导致这个子线程一直被占用。

    所以在Swift中,Data的请求多了一个异常处理:Data(contentsOf: <URL>) throws

    在OC中获取UIImage:

    NSURL *imgurl = [NSURL URLWithString:@"path"];
    NSData *imagedata = [NSData dataWithContentsOfURL:imgurl];
    UIImage *img = [[UIImage alloc] initWithData:imagedata];
    

    在Swift中获取UIImage:

    let url = URL(string: "path")
    do {
        let data = try Data(contentsOf: url!)
        let image = UIImage(data: data)
    }catch let error as NSError {
        print(error)
    }
    
    三、Swift中请求图片,StackOverFlow上的解决方案

    使用URLSession异步请求,封装成UIImageView的扩展:

    extension UIImageView {
        func downloadedFrom(url: URL, contentMode mode: UIViewContentMode = .scaleAspectFit) {
            contentMode = mode
            URLSession.shared.dataTask(with: url) { data, response, error in
                guard
                    let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
                    let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
                    let data = data, error == nil,
                    let image = UIImage(data: data)
                    else { return }
                DispatchQueue.main.async() {
                    self.image = image
                }
                }.resume()
        }
        func downloadedFrom(link: String, contentMode mode: UIViewContentMode = .scaleAspectFit) {
            guard let url = URL(string: link) else { return }
            downloadedFrom(url: url, contentMode: mode)
        }
    }
    
    调用:imageView.downloadedFrom(link: "path")
    

    参考: Loading/Downloading image from URL on Swift

    相关文章

      网友评论

        本文标题:Swift 通过URL加载图片

        本文链接:https://www.haomeiwen.com/subject/thjayftx.html