协议规定了用来实现某一特定功能所必需的方法和属性。
举个栗子:当我们想要在第二个界面进行操作后返回第一个界面并更新第一个界面
第一个界面:主要写协议的实现,在类中直接继承我们的协议并加实现
class FirstPage : UIViewController,Myprotocol{ //继承协议
....
func myfunc(){
print("举个栗子 我们在这打印>_<")//具体实现
}
.....
}
第二个界面:创建协议关键字protocol
protocol Myprotocol {
func myfunc () //不用写具体实现
}
class SecondPage :UIViewController {
var delegate : MyProtocol?
......
//在需要的位置执行
delegate.myfunc()
........
}
恩,以上大致就是网上很多的教程,如果你成功的实现了,那你还是很幸运的。
因为网上很多教程都是在讲两个界面间的跳转,在prepare函数(跳转函数)中,一般会写:
letsubVC = segue.destinationas!DeviceChoseViewController
subVC.delegate=self
但像我这样想在非界面间使用协议的,比如在某一个界面和某一个实例间进行通信,是没有跳转函数的,少了将前一个界面的self设置为后一个界面的代理,编译器编译通过但是无法完成功能。折腾了一半天,实在没找到Bug所在,于是只得重新好好看官方文档,
之后才发现原来少了将代理赋值的操作。
所以在界面要让某一个类通过协议实现自身的方法时,一定要把自身赋值到类的代理上,
在使用某一个实例或类的方法之前加上:
类名.delegate = self----------------->这个很重要,这个很重要,这个很重要,这个真的很重要。
弄明白这些,就再也不用怀疑我用了个假的协议了!!!
网友评论