初步理解iOS编程的委托机制Delegate

1.委托说明:如果一个类想知道另外一个类发生的事件并且做出反应,比起使用类的继承,使用委托机制更能减少代码的复杂度。


2.委托的实现:假如有两个类,一个是房子,一个是看门狗,房子里有钱。

class WatchDog{

}

class House{
   var money:Float = 100
}

需要实现的是狗发现屋子里的钱变少了就要叫让主人知道,实现方法是先创建一个协议其中有抽象的狗吠函数,再在房子里创建一个看门狗的实例,然后让看门狗实现该协议。

protocol dogScream{
   func scream()
}

class House{
   var delegate:dogScream  //注意这里委托的类型是协议
   var money:Float = 100{
         didSet{
              delegate.scream()
         }
    }
   init(..., delegate:dogScream){   //类初始化函数
      self.delegate=delegate
   }
}
class WatchDog:dogScream{
   func scream(){
       //....//
   }
}

 
 
3.这样在钱改变了数值后就会触发看门狗吠。

实现中我觉得最奇怪的地方就是:House中delegate声明为协议类型,但是实例对象的类型是实现了该协议的类,把delegate声明为类类型不行吗?但是想了想,protocol不能单独使用不能实例化必须有东西来实现它才能使用。所以delegate声明为protocol类型实际上是实现了这个protocol的类类型。这样delegate就能是不同的类有不同的协议实现方式,就有不同的反应。比如有另外一只狗,它发现钱少了的反应就可以不是叫而是咬人(将scream函数实现成咬人).


猜你喜欢

转载自blog.csdn.net/LawGeorge/article/details/79194874
今日推荐