swift - protocol
2016-03-15 12:41
337 查看
Protocol(协议)用于统一方法和属性的名称,而不实现任何功能。协议能够被类,枚举,结构体实现,满足协议要求的类,枚举,结构体被称为协议的遵循者。
遵循者需要提供协议指定的成员,如属性,方法,操作符,下标等。
这里只讲和oc 代理类似的那种
在这里,目前还不知道需不需要像oc一样,在调用之前判断代理是否还存在,是否还响应该方法,也不知道这种格式是否正确,求指点一二
项目源码:https://git.oschina.net/lisForCoding/GGTableViewController.git
遵循者需要提供协议指定的成员,如属性,方法,操作符,下标等。
这里只讲和oc 代理类似的那种
一. 声明一个protocol : NSObjectProtocol
protocol GGTableViewControllerDelegate:NSObjectProtocol { //方法 func closeButtonDidClicked() func tableViewDidSelectedAtIndexPath(indexPath:NSIndexPath) }
二. 声明delegate属性
weak var delegate:GGTableViewControllerDelegate?
三. 在合适的地方让delegate 调用代理方法
func closeView() { print("close view") if ((delegate?.respondsToSelector("closeButtonDidClicked")) != nil) { delegate?.closeButtonDidClicked() } }
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { if ((delegate?.respondsToSelector("tableViewDidSelectedAtIndexPath:")) != nil) { delegate?.tableViewDidSelectedAtIndexPath(indexPath) } }
在这里,目前还不知道需不需要像oc一样,在调用之前判断代理是否还存在,是否还响应该方法,也不知道这种格式是否正确,求指点一二
四.遵守代理协议
class MainViewController: UIViewController,GGTableViewControllerDelegate { let vc = GGTableViewController() vc.delegate = self }
五.实现代理方法
//MARK: GGTableViewControllerDelegate func closeButtonDidClicked() { print("will close") let ggView = view.subviews.last ggView?.removeFromSuperview() } func tableViewDidSelectedAtIndexPath(indexPath: NSIndexPath) { print(indexPath) }
项目源码:https://git.oschina.net/lisForCoding/GGTableViewController.git
相关文章推荐
- SwiftMailer 发送邮件时 提示fsockopen() 被禁用
- Swift 数组,字典
- Swift 基本数据类型,常/变量声明(一)
- IOS开发系列之Swift_UI_Btn
- IOS开发系列之Swift_UI_Btn
- IOS开发系列之Swift_UI_Lab
- OC与Swift混编
- Swift-2.7闭包
- 《千万别说swift不用管理内存!这么多坑赶快记下》
- Swift的两个小窍门
- OC使用use_frameworks!添加swift,其他库头文件不提示
- swift 接水果游戏ios源码
- swift 接水果游戏ios源码
- swift系统学习第一章
- Swift基础3.3——便利构造函数
- Swift基础3.2——重载构造函数
- Swift基础3.1——构造函数
- Swift基础2.1——闭包
- Swift基础2.1——函数
- Swift基础1.5——基本语法——集合