Swift实现委托代理的N种方式

前端之家收集整理的这篇文章主要介绍了Swift实现委托代理的N种方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

首先理清概念,delegate只是一种模式理念,不是具体方法。OK

1.extension继承法:赋予某根类扩展“空方法”,使其子类继承后可重写成为代理。
就要你成为我的奴隶

  1. // A.swift
  2. class A{
  3. var delegate : B?
  4. func doSomething()->(){
  5. B?.delegateFun()
  6. }
  7. }
  8.  
  9. extension B{
  10. func delegateFun()->(){}
  11. }
  1. // B.swift
  2. class B{
  3. // 虽然本身没有定义任何方法,但是被拓展了一个delegateFun
  4. }
  1. // C.swift
  2. class C : B{
  3. override func delegateFun()->(){
  4. println("C conform the delegate method!")
  5. }
  6. }

2.protocal协议法:只要实现了指定protocal即可成为代理
下蛋的鸡就是好鸡

  1. // A.swift
  2. class A{
  3. var delegate : AProtocal?
  4. func doSomething()->(){
  5. delegate?.()
  6. }
  7. }
  8.  
  9. protocal AProtocal{
  10. func delegateFun()->()
  11. }
  1. // B.swift
  2. class B : AProtocal{ func delegateFun()->() }

3.闭包+Tuple代理:swift中方法也是first class value
这不是人,这不是妖,这是人妖

  1. // A.swift
  2. class A{
  3. var delegate : (methodA:()->()?,methodB:(Float)->(Bool)?)? func doSomething(){ delegate?.methodA?.() delegate?.methodB?.(10.0) } }

4.继承NSObject使用methodForSelector,使用OC中NSObject提供的的“反射”机制完成调用
无耻下作的典范

  1. 代码涉及与OC交互,较长省略
  2. 原理是用NSObject方法使用字符串获取selector并返回方法,通过OC包装函数指针并返回给swift调用方法较不安全,无法检查运行时

猜你在找的Swift相关文章