swift之屬性閉包回調

類似于Objective-C中把block作為屬性進行傳值一樣,swift也可以通過把閉包作為屬性傳值。

它的寫法是這樣的:
swift中的閉包和block在作為回調使用的時候用法稍有不同,因為它并不能直接作為屬性被使用方調用晴玖。為了探究它是怎么用的,我研究了一下SnapKit中的閉包是怎么寫的。現(xiàn)在假設B頁面要把值回調給A頁面眠菇,在B頁面代碼中要創(chuàng)建一個私有的屬性閉包边败,然后寫一個共有的方法用來接收傳進來的閉包并把傳進來的閉包給該私有屬性閉包賦值。然后在A頁面調用B的這個公有方法即可捎废。

為了說明問題我做了一個demo笑窜,點擊A頁面會跳轉到B頁面,然后B頁面上有2個按鈕登疗,點擊這兩個按鈕會跳回到A頁面并觸發(fā)回調排截。
效果圖如下所示:





為了說明問題我是用可視化編程組件來寫UI的。
A頁面代碼如下所示:

//
//  ViewController.swift
//  swift之屬性閉包回調
//
//  Created by Stroman on 2017/8/19.
//  Copyright ? 2017年 Stroman. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
    //生命周期方法與本demo無關
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    //等待回調
    @IBAction func tapAction(_ sender: UITapGestureRecognizer) {
        let bViewController:BViewController = self.storyboard?.instantiateViewController(withIdentifier: "BViewController") as! BViewController
        bViewController.tranferNoParameterClosure { (Void) in
            print("無參回調了")
        }
        bViewController.tranferParameterClosure { (string) in
            print(string)
        }
        self.present(bViewController, animated: true, completion: nil)
    }
}

B頁面的代碼如下所示:

//
//  BViewController.swift
//  swift之屬性閉包回調
//
//  Created by Stroman on 2017/8/19.
//  Copyright ? 2017年 Stroman. All rights reserved.
//

import UIKit

class BViewController: UIViewController {
    
    //公有的閉包
    private var noParameterEnclosure:((Void) -> Void)?
    private var parameterEnclosure:((String) -> Void)?
    
    //用來傳閉包的公有接口辐益。
    public func tranferNoParameterClosure(callbackEnclosure:@escaping ((Void) -> Void)) {
        self.noParameterEnclosure = callbackEnclosure
    }
    public func tranferParameterClosure(callbackEnclosure:@escaping ((String) -> Void)) {
        self.parameterEnclosure = callbackEnclosure
    }

    //在dismiss的時候回調
    @IBAction func parameterAction(_ sender: UIButton) {
        if self.parameterEnclosure != nil {
            self.parameterEnclosure!("有參傳值了")
        }
        self.dismiss(animated: true, completion: nil)
    }
    @IBAction func noParameterAction(_ sender: UIButton) {
        if self.noParameterEnclosure != nil {
            self.noParameterEnclosure!()
        }
        self.dismiss(animated: true, completion: nil)
    }
    
    //生命周期方法與本demo無關
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末断傲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子智政,更是在濱河造成了極大的恐慌认罩,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件续捂,死亡現(xiàn)場離奇詭異垦垂,居然都是意外死亡,警方通過查閱死者的電腦和手機牙瓢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門劫拗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人一罩,你說我怎么就攤上這事杨幼。” “怎么了聂渊?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵差购,是天一觀的道長。 經(jīng)常有香客問我汉嗽,道長欲逃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任饼暑,我火速辦了婚禮稳析,結果婚禮上,老公的妹妹穿的比我還像新娘弓叛。我一直安慰自己彰居,他們只是感情好,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布撰筷。 她就那樣靜靜地躺著陈惰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毕籽。 梳的紋絲不亂的頭發(fā)上抬闯,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天井辆,我揣著相機與錄音,去河邊找鬼溶握。 笑死杯缺,一個胖子當著我的面吹牛,可吹牛的內容都是我干的睡榆。 我是一名探鬼主播萍肆,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼肉微!你這毒婦竟也來了匾鸥?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤碉纳,失蹤者是張志新(化名)和其女友劉穎勿负,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劳曹,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡奴愉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了铁孵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锭硼。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蜕劝,靈堂內的尸體忽然破棺而出檀头,到底是詐尸還是另有隱情,我是刑警寧澤岖沛,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布暑始,位于F島的核電站,受9級特大地震影響婴削,放射性物質發(fā)生泄漏廊镜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一唉俗、第九天 我趴在偏房一處隱蔽的房頂上張望嗤朴。 院中可真熱鬧,春花似錦虫溜、人聲如沸雹姊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽容为。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坎背,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工寄雀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留得滤,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓盒犹,卻偏偏與公主長得像懂更,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子急膀,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫沮协、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,059評論 4 62
  • 枝艷柳枝 帶牽寬帶 短堤越行長堤 正煙橫月低 稀人馬稀 歸詠未歸 舊詞還復新詞 見危樓燕飛 風喃知我意 意之 知意...
    吟者非癮者閱讀 127評論 0 0
  • 聽了老鄭講的“成為銷售精英的五種心態(tài)”對我影響很大卓嫂。他講的不但對銷售人員適用慷暂,對所有想提高溝通能力的人也同樣有用。...
    南山石_0d4e閱讀 419評論 0 0
  • 前段時間回歸到Win服后發(fā)現(xiàn)conda使用起來有種便秘的感覺晨雳,安裝各種包時快時慢行瑞,最快也沒過30K/s,還時常出現(xiàn)...
    肆不肆傻閱讀 36,094評論 0 7
  • 新的開始
    富蘭克林門徒閱讀 164評論 0 0