zoukankan      html  css  js  c++  java
  • iOS oc和swift中协议的使用

    创建一个空的工程

    在工程中我们新建一个类 继承与NSObject 

    定义一个协议‘

    @protocol UpdateAlertDelegate <NSObject> //这里的红色字体就是我们定义的协议的名称

    - (void)updateAlert;//这个就是如果某个类要遵循此协议必须实现的一个方法,有参数或者无参数视情况而定

    @end

    @interface TimerControl : NSObject

    @property (nonatomic, weak) id<UpdateAlertDelegate> delegate;

    @end

    在这个协议类实现的文件里

    当需要委托另一个类做一些事情的时候

    我们就可以在这个协议类的实现文件里写上这么一行代码

     [self.delegate updateAlert];

    在要遵循此协议的类里 首先要接受此协议‘

    @interface DelegateDemoViewController : UIViewController<UpdateAlertDelegate> 

    协议对象.delegate = self; //设置代理实例 

     而且还要必须实现此协议规定的一些方法

    - (void)updateAlert {//实现协议的方法


    也就是说当协议类里的[self.delegate updateAlert];这句代码执行以后 紧接着执行的是遵循此协议的类里面实现的此协议规定的协议方法

    swift

    1.首先定义一份协议。
    protocol ToolProrocol{
       //代理方法
       func didRecieveResults(result:Int)
    }

    2.定义一个代理属性
    //声明代理属性
    var delegate : ToolProrocol?

    3. 实用者,首先加上
    class ViewController: UIViewController,ToolProrocol 

    4.并且设置代理和实现
      xxx.delegate = self
      func didRecieveResults(result: Int) {
        }

    5. 最后直接调用就ok了
    self.delegate?.didRecieveResults(1)

    虽然有点绕  但事实就是这样  哈哈哈 完事   只要理解了其实你想用的时候自然而然的就写出来了   

  • 相关阅读:
    [原]JsDoc:JavaScript文档生成工具相关
    [原]代码片段编辑器
    [原]openlayers+ext
    [原]符合W3C标准的类innerText
    [原]关于鼠标滚轮的编程
    [原]IE8中开启IE7的兼容模式
    MAC下安装mysql
    intellij idea 代码正常,但是编译出现 java:需要";"
    eclipse 安装插件不生效
    [转]Linux下修改/设置环境变量JAVA_HOME
  • 原文地址:https://www.cnblogs.com/lwk151124/p/5744377.html
Copyright © 2011-2022 走看看