小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

swift network----利用URLSession的Block模式下载多张图片

Swift学习 额外说明

收录于:52天前

首先是效果图



然后上传源码

1、请求网络数据的URLSession的简单封装

import Foundation

class LJDownLoadNetImage: NSObject {

    static func request(_ method: String, url: String, callback: @escaping (_ data: Data?, _ response: URLResponse?, _ error: Error?) -> Void) {
        let session = URLSession.shared
        let request = NSMutableURLRequest(url: NSURL(string: url)! as URL)
        request.httpMethod = method
        let task = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
            callback(data, response, error)
        })
        task.resume()
    }
}


2. 上面效果图的代码

import UIKit

class TFNetImageViewController: TFBaseViewController, UITableViewDataSource, UITableViewDelegate{

    var TFTableView:UITableView!
    var titleItemArray = ["姓名","账号","爱好","职业","年薪"]
    
    var imageUrlArray =  ["http://pica.nipic.com/2007-12-12/20071212235955316_2.jpg",
                         "http://hangge.com/blog/images/logo.png",
                            "https://www.iphonetrain.com/core/res/images/logo.png",
                            "http://pica.nipic.com/2007-12-12/20071212235955316_2.jpg",
                            "http://pica.nipic.com/2007-12-12/20071212235955316_2.jpg"];
    
    override func viewDidLoad() {
        super.viewDidLoad()

        self.setTopNavBarTitle("个人信息")
        self.setTopNavBackButton()
        self.view.backgroundColor = UIColor.lightGray
        self.creatTable()
    }
    
    func creatTable(){

        TFTableView = UITableView(frame: CGRect(x: 0, y: 64, width: AppWidth, height: AppHeight - 64),style:UITableViewStyle.grouped);
        TFTableView.delegate = self;
        TFTableView.dataSource = self;
        self.view.addSubview(TFTableView);
        
        TFTableView.register(TFNetImageTableViewCell.self, forCellReuseIdentifier: "identtifier")
    }
    
    //MARK: UITableViewDataSource
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1;
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 5;
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{
            return 55;
    }
    
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 10;
    }
    

    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 1;
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  
        let cellIdentifier : String = "identtifier"
        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) as! TFNetImageTableViewCell
        
        let urlStr = "https://raw.githubusercontent.com/onevcat/Kingfisher/master/images/kingfisher-\(indexPath.row + 1).jpg"
        //cell.setCellData((titleItemArray[indexPath.row] as NSString) as String , imageUrlStr: imageUrlArray[indexPath.row])
        
        cell.setCellData(titleItemArray[indexPath.row], imageUrlStr: urlStr)

        return cell
    }
    
    //MARK: UITableViewDelegate
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        
        tableView.deselectRow(at: indexPath, animated: true);
    }
 }

cell的代码

import UIKit

class TFNetImageTableViewCell: UITableViewCell {

    var titleImage : UIImageView!
    var titleLabel : UILabel!
    
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        
        self.creatCell()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        self.selectionStyle = UITableViewCellSelectionStyle.none
        // Configure the view for the selected state
    }
    
    
    func creatCell(){
       //http://pica.nipic.com/2007-12-12/20071212235955316_2.jpg

        //设置label
        titleLabel = UILabel(frame: CGRect(x: 60, y: 18, width: 40, height: 14))
        titleLabel.textAlignment = NSTextAlignment.center
        titleLabel.font = UIFont.systemFont(ofSize: 14.0)
        self.contentView.addSubview(titleLabel)
        
        /*
           1. 直接加载本地的图片
         */
        
        /*
        titleImage = UIImageView(frame: CGRect(x: 0, y: 5, width: 40, height: 40))
        titleImage.image = UIImage(named: "unicorn.png")
        titleImage.backgroundColor = UIColor.red;
        self.contentView.addSubview(titleImage)
         */
        
        /*
           2. 加载网络图片
         */
        
        /*
        //定义NSURL对象
        let url = NSURL.init(string: "http://hangge.com/blog/images/logo.png")
        //从网络获取数据流
        let data = NSData(contentsOf: url! as URL)
        
        //此处如果data有值的话,才去初始化image
        if (data != nil) {
            //通过数据流初始化图片
            let newImage = UIImage(data: data! as Data)
            let  titleImage = UIImageView(frame: CGRect(x: 0, y: 5, width: 40, height: 40))
            titleImage.image = newImage
            self.contentView.addSubview(titleImage)
        }
        else{
            /*
              直接加载本地的图片
             */
            titleImage = UIImageView(frame: CGRect(x: 0, y: 5, width: 40, height: 40))
            titleImage.image = UIImage(named: "unicorn.png")
            titleImage.backgroundColor = UIColor.red;
            self.contentView.addSubview(titleImage)
        }
 */
    }
    
    func setCellData(_ labelNameStr:String,  imageUrlStr:String)
    {
       titleLabel.text = labelNameStr as String
        
        /*
         3. 利用封装的URLSession加载网络图片
         */
        LJDownLoadNetImage.request("GET", url: imageUrlStr) { (data, response, error) in
            
            //此处如果data有值的话,才去初始化image
            if (data != nil) {
                let newImage = UIImage(data: data! as Data)
                let  titleImage = UIImageView(frame: CGRect(x: 0, y: 5, width: 40, height: 40))
                titleImage.image = newImage
                self.contentView.addSubview(titleImage)
            }
        }
        
        /*
        //定义NSURL对象
        let url = NSURL.init(string: imageUrlStr)
        //从网络获取数据流
        let data = NSData(contentsOf: url! as URL)
        
        //此处如果data有值的话,才去初始化image
        if (data != nil) {
            //通过数据流初始化图片
            let newImage = UIImage(data: data! as Data)
            let  titleImage = UIImageView(frame: CGRect(x: 0, y: 5, width: 40, height: 40))
            titleImage.image = newImage
            self.contentView.addSubview(titleImage)
        }
        else{
            /*
             直接加载本地的图片
             */
            titleImage = UIImageView(frame: CGRect(x: 0, y: 5, width: 40, height: 40))
            titleImage.image = UIImage(named: "unicorn.png")
            titleImage.backgroundColor = UIColor.red;
            self.contentView.addSubview(titleImage)
        }
 */
    }

}



. . .

相关推荐

额外说明

rabbitmq学习(三)——工作队列工作队列的轮询

一、出现背景 在我的前一篇博客中,我们简单说明了simple queue 简单队列的发送和接受操作,但总体看代码和流程,我们会发现存在很多不足。 简单队列存在的不足: 耦合性过高。 1、生产者和消费者必须保证一一对应,如果需要实现多个消费者共同消费同一个

额外说明

http服务器只是与浏览器通信并发送图片

在yg帮助下用Java做的,读取本地一张图片,发给浏览器(Client) import javax.imageio.stream.FileImageInputStream; import java.io.* ; import java.net.* ;

额外说明

《SQL入门教程》第03章查询条件

《SQL 入门教程》专栏目录 第01篇 SQL 简介 第02篇 查询初体验 第03篇 查询条件 第04篇 结果排序 第05篇 限定结果数量 第06篇 分组与汇总 第07篇 多表连接查询 第08篇 初探 SQL 查询执行顺序 第09篇 CASE:SQL 中

额外说明

Docker部署Nginx-常用命令

1.拉取 docker pull nginx 2. 查看镜像 docker images 3.保存镜像 docker save -o nginx.tar nginx:latest  4.删除镜像 docker rmi nginx:latest 5. 加载

额外说明

20分钟!一键部署Oracle 18C单机CDB+PDB

无人值守安装Oracle 18C单机CDB+PDB,只需要20分钟?没错,通过脚本静默安装,真的只需要20分钟,包括安装补丁,建库。 脚本下载链接:SHELL脚本进行oracle数据库一键安装,实现真正的无人值守安装 一、主机准备 主机版本 主机内存 主

额外说明

(四)Flask——配置详解

一、配置: Flask中的配置文件是一个flask.config.Config对象(继承字典)。后续会剖析源码瞅瞅。 基本方法: 直接设置配置项——可以直接在应用程序中设置配置项,而不使用配置文件或环境变量。例如,在应用程序中使用以下代码设置配置项: f

额外说明

【Java 进阶篇】MySQL外键约束详解

在数据库设计和管理中,外键约束是一项重要的功能,它用于维护表与表之间的关联关系,保证数据的完整性和一致性。本文将详细介绍MySQL外键约束的概念、用法以及一些最佳实践,以帮助您更好地理解和应用外键约束。 1. 什么是外键约束 在数据库中,外键约束是一种关

额外说明

Linux系统部署Go语言开发运行环境

在Linux系统上部署Go语言开发运行环境需要执行以下步骤: 下载Go语言安装包:打开Go官方网站(https://golang.org),在下载页面选择合适的安装包。根据系统架构选择相应的安装包(如Linux 64位),下载并保存到本地。 安装Go语言

额外说明

机器学习强基计划0-2:什么是机器学习?和AI有什么关系?

目录 0 写在前面 1 什么是机器学习? 1.1 定义 1.2 编程逻辑 2 机器学习与AI的关系 2.1 人工智能三大学派 2.2 机器学习在AI中 3 机器学习能干什么? 4 学习路线 0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型

额外说明

运行某程序提示XAudio2_5.dll丢失找不到如何解决?

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个XAudio2_5.dll文件进行安装(前提是找到适合的版本)

ads via 小工具