设为首页 加入收藏

TOP

窥探Swift之协议(Protocol)和委托代理(Delegate)回调的使用(一)
2017-10-10 12:17:29 】 浏览:6523
Tags:窥探 Swift 协议 Protocol 委托 代理 Delegate 使用

  协议与委托代理回调在之前的博客中也是经常提到和用到的在《Objective-C中的委托(代理)模式》和《iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流》等博客内容中都用到的Delegate回调。说到协议,在Objective-C中也是有协议的,并且Swift中的协议和Objc中的协议使用起来也是大同小异的,在Java等现代面向对象编程语言中有接口(Interface)的概念,其实和Swift中或者Objc中的Protocol(协议)是一个东西。论InterfaceProtocol的功能来说,两者也是大同小异的。

  今天就结合两个实例来窥探一下Swift中的协议与Delegate回调(委托代理回调)。本篇先给出CocoaTouch中常用控件UITableView的常用回调,并以此来认识一下回调的使用方式。紧接着会给出如何去实现自己的Delegate回调,即在自定义控件中去实现委托代理回调。言归正传,开始今天的博客主题。

  一.从UITableView中来窥探协议的委托代理回调

    UITableView这个高级控件在iOS开发中的出镜率是比较高的,今天的重点不是介绍如何使用UITableView, 而是让通过UITableView的工作方式来直观的感受一下协议的使用场景,以及Delegate代理的工作方式。如果你对UITableView控件不熟的话,完全可以跳过这一部分,直接进入第二部分。如果你要更好的理解Delegate委托回调,还是很有必要看这一部分的。

    下面就先以UITableView的UITableViewDatasource协议来看一下委托代理的使用方式。为了简化代码呢,下面的TableView的使用就没有实现UITableViewDelegate协议还是那句话,今天的重点是Protocol和Delegate, 而不是如何使用UITableView。下方的截图就是我们要使用UITableViewUITableViewDatasource来做的事情。当然下方的实例无论是代码还是布局方面还是灰常简单的,运行效果如下所示。

    上面的Cell中就是一个ImageView和一个Label, 布局灰常简单啦,接下来就简单介绍一下在Swift中是如何实现(说白了,和Objc实现起来大同小异)。还是结合着Storyboard来做吧,毕竟使用Storyboard布局更为简单一些。

    1. 使用Storyboard来布局控件,控件布局如下:

 

    2. 给上述Cell绑定相应的Swift源码,并关联ImageView和Label, 相应Cell(BeautifulGrillCell)的代码如下所示。girlImageView即为做吧的图片,

girlNameLable为图片右边的文字。

 1 import UIKit
 2 
 3 class BeautifulGrillCell: UITableViewCell {
 4 
 5     @IBOutlet var girlImageView: UIImageView!
 6     
 7     @IBOutlet var girlNameLable: UILabel!
 8     
 9     override func awakeFromNib() {
10         super.awakeFromNib()
11         // Initialization code
12     }
13 
14     override func setSelected(selected: Bool, animated: Bool) {
15         super.setSelected(selected, animated: animated)
16 
17         // Configure the view for the selected state
18     }
19 
20 }

 

    3.接下来就是要模拟我们在TableView上显示的数据了,在正常开放中这些数据往往来源于网络请求,而在本篇博客中就模拟数据源,来为我们的TableView提供显示的数据。数据源的格式是一个数组,而数组中存放的是多个字典,每个字典有两个键值对,一个键值对存储要显示图片的文件名,另一个键值对则存储美女的名字。为了使该数据的存储结构,请看下方结构图。

    原理图有了,接下来就要使用代码来创建出上述结构的数据以供TableView的数据源使用,下面的方法就是实现上述结构的函数。

       (1) 首先我们要在视图控制器相应的类中添加一个可变数组,用来存放数据,如下所示:

1     private var dataSource:Array<Dictionary<String, String>>?

 

      (2) 接着就是往上面这个数组中填充数据了,代码如下:

1     //-----------创建Table要显示的数据-------------------------
2     func createSourceData() {
3         self.dataSource = Array<Dictionary<String, String>>();
4         for (var i = 0; i<10; i++) {
5             let imageName:String = "00\(i).jpg"
6             let girlName:String = "美女\(i + 1)"
7             self.dataSource?.append([IMAGE_NAME:imageName, GIRL_NAME:girlName])
8         }
9     }

 

    4. 我们上面Storyboard中的视图控制器使用的是UIViewController而不是UITableViewController。 我们在UIViewController上贴了一层UITableView, 所以我们需要在相应的ViewController对应的Swift源码中进行UITableView的绑定,并实现UITableViewDatasource代理,并为UITableView指定该代理。下方的代码就是关联tableview并指定代理方法。代码如下:

 1 import UIKit
 2 
 3 class ViewController: UIViewController, UITableViewDataSource {
 4 
 5     @IBOutlet var myTableView: UITableView!
 6     //life cycle
 7     override func viewDidLoad() {
 8         super.viewDidLoad()
 9         self.createSourceData()
10         self.myTableView.dataSource = self
11     }
12 }

 

 

    4. 对myTableViewdataSource(数据提供者)指定完代理对象后,接下来就是要实现UITableViewDataSource中的相应的方法了,ViewController通过这些协议委托回调的代理方法来为TableView提供数据。下方是UITableViewDataSource委托方法中返回TableViewSec

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Swift语法笔记 下一篇窥探Swift之类的继承与类的访问权..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目