L

Lee坚武

V1

2022/07/13阅读:14主题:默认主题

iOS Swift中Delegate的正确使用姿势

本人亲测有效!更多交流可以家魏鑫:lixiaowu1129,公重好:iOS过审汇总,一起探讨iOS技术!

前言

委托(delegate)是Cocoa的一个术语,表示将一个对象的部分功能转交给另一个对象。 比如对象A希望对象B知道将要发生或已经发生某件事情,对象A可以把对象B的引用存为一个实例变量。这个对象B称为委托。当事件发生时,它检查委托对象是否实现了与该事件相适应的方法。如果已经实现,则调用该方法。

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

在A类里面声明一个ADelegate的代理,B类遵循并使用ADelegate定义的函数。

实现

A.swift
//创建协议  
protocol ADelegate:NSObjectProtocol  
{  
    //回调方法 传一个String类型的值  
    func delegateMethod(string:String)  
}  
class A: UIViewController  
{  
    weak var delegate:ADelegate?  
    override func viewDidLoad()  
    {  
        super.viewDidLoad() 
        ...
    }  
  
    func goBack()  
    {  
        //调用代理方法  
        if delegate != nil
        {  
            delegate?.delegateMethod(string:"123")  
            self.navigationController?.popToRootViewControllerAnimated(true)  
        }  
          
    }  
}  
B.swift
class A: UIViewController, ADelegate  
{  

    override func viewDidLoad()  
    {  
        super.viewDidLoad() 
        ...
    }  
  
    //push  
    func nextPage()  
    {  
        let aController = A()  
        //指定代理  
        aController.delegate = self  
        self.navigationController!.pushViewController(aController, animated:true)  
    }  


    //接收传过来的值  
    func delegateMethod(string:String)  
    {  
        ...
    }  
}  

总结

Objective-C中delegate的实现和Swift中delegate基本一样的,委托也是iOS编程中常见的一种设计模式。在平常使用过程中,要多加注意,才能更加熟练地使用。

分类:

移动端开发

标签:

IOS

作者介绍

L
Lee坚武
V1