SWIFT 閉包傳值方式

閉包傳值

閉包主要用于回調,這里我們還是模擬從詳情界面傳值到主界面,首先我們需要在詳情界面為閉包取個別名,聲明一個閉包類型,如下所示:

// 1、聲明閉包類型

typealias Closure=(String?)->Void

其次在詳情界面控制器中,聲明閉包屬性:

// 2、聲明閉包屬性

varclosure: Closure!

接下來,我們需要為詳情界面聲明一個閉包回調的方法,用于在主界面中調用,并且為閉包屬性賦值,如下所示:

// MARK:- closure send values methods

-// 3、閉包傳值調用方法

func callBack(closure: Closure!)

{

// 4、賦值閉包屬性

self.closure = closure

}

現在閉包屬性已經有值了,我們還需要在處理界面返回的方法中實現回調傳值的邏輯,同樣的,閉包類型為可選類型,我們可通過可選綁定判斷閉包屬性是否有值,如果有值,則通過閉包將需要傳遞到主界面的數據傳遞出去,代碼如下:

func respondsToBtn(sender:UIButton) {

//5、可選綁定:判斷closure屬性是否不為nil,如果不為nil,則通過closure將文本信息回調到調用closure方法所在的控制器中;

if?? let closure =self.closure {? ? ?

? closure(self.textField.text)?

? ? ? ? ? ? ? ? ? ? ? }

self.dismissViewControllerAnimated(true,completion:nil)

}

現在詳情界面已經配置完畢,最后一步,我們在主界面推送到詳情界面的方法中,通過實例化的詳情界面對象,調用閉包回調方法,然后打印數據即可,該方法在詳情界面返回到主界面的時候會直接被調用,代碼如下:

// MARK:- Events -func respondsToBtn(sender: UIButton) {letdetail_vc=DetailViewController()? ? detail_vc.callBack { (value:String?)->Voidinprint(value!)? ? }self.presentViewController(detail_vc, animated:true, completion: nil)}

Tips:

1、為閉包取別名,可在參數列表中將需要傳遞的參數寫成形參;

2、設置一個方法持有當前block;

3、在合適的地方進行調用類似于代理;

4、在創建該對象的地方進行閉包方面的調用;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容