Delegate委托的使用

委托的说明

委托(delegate)是Cocoa的一个术语,表示将一个对象的部分功能转交给另一个对象。

比如对象A希望对象B知道将要发生或已经发生某件事情,对象A可以把对象B的引用存为一个实例变量。这个对象B称为委托。当事件发生时,它检查委托对象是否实现了与该事件相适应的方法。如果已经实现,则调用该方法。

由于松耦合的原因,一个对象能成为多个对象的委托。某些情况下,相较于通过继承让子类实现相关的处理方法,可以有效减少代码复杂度。所以iOS中也大量的使用了委托。

委托的实例

//定义个协议
protocol loadingDeleagte {func didLoading(text: String)
}
class HomeViewController: UIViewController {@IBOutlet weak var textFlied: UITextField!//2.声明一个委托代理var delegate: loadingDeleagte?override func viewDidLoad() {super.viewDidLoad()}@IBAction func backBtnClick(_ sender: AnyObject) {print("点击了")//3实例一个 ViewController类let loading = ViewController()//指定委托代理是 loading 的实例delegate = loading//调用委托实现的协议方法delegate?.didLoading(text: textFlied.text!)}override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {UIApplication.shared.keyWindow?.endEditing(true)}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.}}
import UIKitclass ViewController: UIViewController {@IBOutlet weak var textLable: UILabel!@IBOutlet weak var NextBtn: UIButton!override func viewDidLoad() {super.viewDidLoad()}}//4实现LoadingDelegate协议
extension ViewController : loadingDeleagte {func didLoading(text: String) {print(text)//值已经传过来了}
}

实际开发中容易遇到的问题

  • 实际开发中容易遇到的问题
    1.新建的另一个页面的的controller对象,不是要跳转的页面的controller。
    2.delegate没有设置好,导致获取不到对应controller的控件
  • 关键解决方法:
//获取到对应页面的controller
let secondView = self.storyboard?.instantiateViewController(withIdentifier: "second") as! addTagsViewController//设置secondView中的代理为当前ViewController自身secondView.delegate=selfself.navigationController!.pushViewController(secondView,animated:true)

secondView中传值回去

if((delegate)) != nil{delegate?.didLoading(text: "传值回去")self.navigationController?.popViewController(animated: true)

参考资料

http://www.hangge.com/blog/cache/detail_810.html

https://www.cnblogs.com/ningmengcao-ios/p/5952872.html

Delegate委托的使用相关推荐

  1. Strategy模式与Delegate委托

    Strategy模式是对算法的封装.即使是一个计算行为,如果其实现有其多样性,为达到易扩展的目的,我们也有必要将其抽象出来,以接口的形式来定义.由于充分利用了面向对象的多态性,在调用该行为时,其具体的 ...

  2. delegate委托

    delegate委托: 三个概念: C# 中的委托类似于 C 或 C++ 中的函数指针. 委托是面向对象.类型安全的,并且是安全的. 委托和接口的类似之处是:它们都允许分隔规范和实现. 一个原则: 被 ...

  3. C# Delegate(委托)与多线程

    C# Delegate(委托)与多线程 很多时候写windows程序都需要结合多线程,在.net中用如下得代码来创建并启动一个新的线程.     public void ThreadProc();   ...

  4. 【C#学习】delegate(委托) 和 event(事件)

    C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变.在C#中方法不能作为参数直接传递,必须 ...

  5. 转:终于会用c#中的delegate(委托)和event(事件)了

    第一个例子: public class DelegateTest {// 声明delegate对象 public delegate void CompareDelegate(int a,int b); ...

  6. UE4 C++:Delegate委托

    目录 概念 定义 声明委托 单播委托 声明宏 绑定委托 执行函数 用法示例 不带参数Delegate 带参数Delegate 传递有效负载数据 多播委托 声明宏 绑定多播委托 多播执行 动态委托 声明 ...

  7. C#学习基本概念之关键字---delegate(委托)

    委托类型的声明与方法签名相似,  有一个返回值和任意数目任意类型的参数: public delegate void TestDelegate(string message); public deleg ...

  8. Csharp关键字----delegate(委托)

    Delegate类简介 ------------------------      命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 委托(Delegate)类是一 ...

  9. delegate 委托方法

    一先定义一个委托方法 ---------第一个类XX //定议委托 public event ordinary Ordinary; //定议委托方法 public delegate void ordi ...

最新文章

  1. 无需重启, 使用Xephyr调试awesome
  2. 使用tensorflow serving部署keras模型(tensorflow 2.0.0)
  3. iptables复习记忆
  4. zoj 3747 (DP)(连续至多,连续至少)
  5. 10个非常有用的CSS hack和技术
  6. 【渝粤教育】广东开放大学 计量经济学 形成性考核 (21)
  7. oracle job 与存储过程,应用oracle job和存储过程
  8. bash ./php-memcache.sh,PHP+shell脚本操作Memcached和Apache Status的实例分享
  9. 从双层优化视角理解对抗网络GAN
  10. html搞笑注释,9个最有趣的代码注释
  11. python必须下载到c盘吗_python为什么要安装到c盘
  12. C语言为四维数组申请动态内存空间的方法(一)
  13. Delphi 与 DirectX 之 DelphiX(63): TDIB.DoPosterize();
  14. ElasticSearch常用的几种查询方式
  15. [渝粤教育] 南京航空航天大学 航空航天材料概论 参考 资料
  16. 数字图像处理 离散余弦变换(DCT)和峰值信噪比(PSNR)
  17. 企业业务逻辑常见风险
  18. xmind8 下载安装与破解激活
  19. 一:【博客分享】优秀的有趣的博客
  20. Input输入框的失焦

热门文章

  1. m基于RBF神经网络和BP神经网络的信道估计误码率matlab仿真
  2. Oracle 的表分区详解
  3. 为什么淘宝搜索宝贝排名先后不一样,原理是什么?
  4. flash模板 超级链接该如何加
  5. VMware ESXi启动卡在 vmkibft loaded successfully
  6. pandownload + speedpan下载器 tampermonkey + IDM下载器
  7. 【学习】如何制作手机端html模板(REM的实际应用)
  8. matlab编程与最优化设计应用,MATLAB编程与最优化设计应用
  9. 【个人记录】torch转onnx对上TensorRT的grid_sample接口(4D/5D)进行加速
  10. 【游戏编程扯淡精粹】工作两年总结