Protocol(协议)用于统一方法和属性的名称,而不实现任何功能。协议能够被类,枚举,结构体实现,满足协议要求的类,枚举,结构体被称为协议的遵循者。
遵循者需要提供协议指定的成员,如属性,方法, *** 作符,下标等。
这里只讲和oc 代理类似的那种
一. 声明一个protocol : NSObjectProtocolprotocol 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
以上是内存溢出为你收集整理的swift - protocol全部内容,希望文章能够帮你解决swift - protocol所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)