Swift中Delegate的正確使用姿勢

前言

委托(delegate)是Cocoa的一個(gè)術(shù)語,表示將一個(gè)對象的部分功能轉(zhuǎn)交給另一個(gè)對象。

比如對象A希望對象B知道將要發(fā)生或已經(jīng)發(fā)生某件事情,對象A可以把對象B的引用存為一個(gè)實(shí)例變量。這個(gè)對象B稱為委托。當(dāng)事件發(fā)生時(shí),它檢查委托對象是否實(shí)現(xiàn)了與該事件相適應(yīng)的方法。如果已經(jīng)實(shí)現(xiàn),則調(diào)用該方法。

由于松耦合的原因,一個(gè)對象能成為多個(gè)對象的委托。某些情況下,相較于通過繼承讓子類實(shí)現(xiàn)相關(guān)的處理方法,可以有效減少代碼復(fù)雜度。所以iOS中也大量的使用了委托。

目標(biāo)

在A類里面聲明一個(gè)ADelegate的代理,B類遵循并使用ADelegate定義的函數(shù)。

實(shí)現(xiàn)

A.swift

//創(chuàng)建協(xié)議  
protocol ADelegate:NSObjectProtocol  
{  
    //回調(diào)方法 傳一個(gè)String類型的值  
    func delegateMethod(string:String)  
}  
class A: UIViewController  
{  
    weak var delegate:ADelegate?  
    override func viewDidLoad()  
    {  
        super.viewDidLoad() 
        ...
    }  
  
    func goBack()  
    {  
        //調(diào)用代理方法  
        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)  
    {  
        ...
    }  
}  

總結(jié)

Objective-C中delegate的實(shí)現(xiàn)和Swift中delegate基本一樣的,委托也是iOS編程中常見的一種設(shè)計(jì)模式。在平常使用過程中,要多加注意,才能更加熟練地使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,101評論 4 61
  • 每個(gè)人心中或許都有一段揮之不去,難以觸碰的感情吧,那感情里住著一個(gè)人,一個(gè)不再有可能會在一起的人。 前幾日回家,和...
    一只任性的豬閱讀 1,084評論 0 0
  • 一:信仰和文化 什么是信仰?信仰是人在內(nèi)心中把某個(gè)人、某件事、某個(gè)宗教、理念當(dāng)做行為準(zhǔn)則。頂級的信仰,就是宗教。猶...
    謝江華閱讀 668評論 0 0
  • 【大楚小斯】的情書 爸爸媽媽已經(jīng)踏上了返回的行程,你們倆被留在了爺爺奶奶家。 離別的時(shí)候哥哥很淡定,在我們...
    浮沉浮沉閱讀 224評論 0 0
  • 運(yùn)營都要做什么?做運(yùn)營的人應(yīng)該都能說出很長很長時(shí)間,特別是剛?cè)胄械倪\(yùn)營人員,如果讓大家總結(jié)成一句話,那可能就是“打...
    浪里一清閱讀 466評論 0 2

友情鏈接更多精彩內(nèi)容