SWIFT 通知傳值

通知傳值

首先我們來看看通知傳值,通知可實(shí)現(xiàn)任意界面之間的數(shù)據(jù)傳遞纹安,但必須滿足一個(gè)條件在岂,就是保證在發(fā)送通知的時(shí)候監(jiān)聽者已經(jīng)存在(先要注冊(cè)通知)。而通知的注冊(cè)主要通過NSNotificationCenter通知中心實(shí)現(xiàn)技即,其為一個(gè)系統(tǒng)單例,系統(tǒng)提供了defaultCenter()方法獲取通知實(shí)例對(duì)象樟遣。

通知使用步驟:注冊(cè)通知 -> 發(fā)送通知 -> 移除通知

通知實(shí)現(xiàn)的原理而叼,我們可以這樣去理解,學(xué)生監(jiān)聽下課鈴聲豹悬。我們把學(xué)生看做監(jiān)聽者(或者叫觀察者)葵陵,監(jiān)聽鈴聲,鈴聲一響就放學(xué)瞻佛。當(dāng)鈴聲響起時(shí)脱篙,我們看做發(fā)出一個(gè)通知(信號(hào)),學(xué)生在監(jiān)聽到鈴聲之后就會(huì)做出相應(yīng)的操作,比如放學(xué)之后做什么……

接下來我們看看通知傳值的具體實(shí)現(xiàn)方式绊困。這里我們模擬從詳情界面?zhèn)髦档街鹘缑嫒坛冢瑸榱私y(tǒng)一,下文都用ViewController表示主界面考抄,DetailViewController表示詳情界面细疚。首先我們需要在主界面注冊(cè)通知,因?yàn)榇罚绦蜻\(yùn)行肯定是先到主界面中疯兼,所以,當(dāng)在詳情界面發(fā)送通知的時(shí)候贫途,通知監(jiān)聽者肯定是存在的吧彪。注冊(cè)通知的方法常用的有以下兩種:

// 1、publicfunc addObserver(observer: AnyObject, selector aSelector: Selector, name aName:String?, object anObject: AnyObject?)// 2丢早、publicfunc addObserverForName(name:String?, object obj: AnyObject?,queue: NSOperationQueue?, usingBlock block: (NSNotification)->Void)->NSObjectProtocol


第1種姨裸,我們需要通過Selector參數(shù)設(shè)置接收到通知時(shí)觸發(fā)的方法。而第2種怨酝,我們無需關(guān)聯(lián)觸發(fā)方法傀缩,在方法尾部跟著一個(gè)閉包,當(dāng)接收到通知的時(shí)候該閉包會(huì)自動(dòng)調(diào)用农猬,我們可直接在閉包內(nèi)處理相應(yīng)的邏輯即可赡艰。第2種方法還有一個(gè)參數(shù)queue,該參數(shù)主要設(shè)置通知觸發(fā)方法執(zhí)行的隊(duì)列斤葱,其為NSOperationQueue類型的對(duì)象慷垮,這里我們一般在主隊(duì)列執(zhí)行,配置參數(shù)方法為NSOperationQueue.mainQueue()揍堕。我們可以直觀的看到料身,在兩種方法中都有一個(gè)name參數(shù),該參數(shù)我們可以理解為通知的代號(hào)衩茸,通過這個(gè)代號(hào)我們可以避免多個(gè)通知串聯(lián)芹血,這個(gè)參數(shù)我們可以賦值任意字符串。此處以第2種為例递瑰。

//1祟牲、register notificationNSNotificationCenter.defaultCenter().addObserverForName("notification_name", object: nil, queue: NSOperationQueue.mainQueue()) { (info: NSNotification) -> Voidin// 處理接收到通知之后執(zhí)行的邏輯...}

通知注冊(cè)好之后隙畜,下一步我們就可以在詳情界面發(fā)送通知了抖部,我們?cè)谔幚斫缑嫣D(zhuǎn)(返回)的方法中處理這一邏輯。發(fā)送通知主要用到以下方法:

// 發(fā)送通知publicfuncpostNotificationName(aName: String,objectanObject: AnyObject?, userInfo aUserInfo: [NSObject : AnyObject]?)


這里需要注意议惰,發(fā)送通知的aName參數(shù)慎颗,必須和注冊(cè)通知時(shí)的name參數(shù)一致,否則在主界面將無法接收到通知。我們可通過aUserInfo參數(shù)將需要傳遞的數(shù)據(jù)傳遞到主界面中俯萎,該參數(shù)為一個(gè)[NSObject : AnyObject]?(字典)類型的數(shù)據(jù)傲宜。實(shí)現(xiàn)示例如下:

func respondsToBtn(sender:UIButton) {// 2、post notification and send valueNSNotificationCenter.defaultCenter().postNotificationName("notification_name", object:nil, userInfo: ["text":self.textField.text!])self.dismissViewControllerAnimated(true, completion:nil)}


當(dāng)用戶點(diǎn)擊返回按鈕時(shí)夫啊,發(fā)送通知函卒,主界面接收到對(duì)應(yīng)通知之后將會(huì)回調(diào)閉包,我們可在閉包中打印傳遞過來的數(shù)據(jù)撇眯,如下所示:

NSNotificationCenter.defaultCenter().addObserverForName("notification_name", object: nil, queue: NSOperationQueue.mainQueue()){(info)->Voidinprint((info.userInfo!["text"])!)

}

到了這一步报嵌,我們已經(jīng)基本實(shí)現(xiàn)通知傳值了,我們還需要最后一步熊榛,移除通知锚国,通知的移除我們可在界面釋放的方法(析構(gòu)方法)中去執(zhí)行,如下所示:

deinit {

// 3玄坦、removenotificationNSNotificationCenter.defaultCenter().removeObserver(self)

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末血筑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子煎楣,更是在濱河造成了極大的恐慌豺总,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件择懂,死亡現(xiàn)場(chǎng)離奇詭異园欣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)休蟹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門沸枯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赂弓,你說我怎么就攤上這事绑榴。” “怎么了盈魁?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵翔怎,是天一觀的道長。 經(jīng)常有香客問我杨耙,道長赤套,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任珊膜,我火速辦了婚禮容握,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘车柠。我一直安慰自己剔氏,他們只是感情好塑猖,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谈跛,像睡著了一般羊苟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上感憾,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天蜡励,我揣著相機(jī)與錄音,去河邊找鬼阻桅。 笑死巍虫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鳍刷。 我是一名探鬼主播占遥,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼输瓜!你這毒婦竟也來了瓦胎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤尤揣,失蹤者是張志新(化名)和其女友劉穎搔啊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體北戏,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡负芋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗜愈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旧蛾。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蠕嫁,靈堂內(nèi)的尸體忽然破棺而出锨天,到底是詐尸還是另有隱情,我是刑警寧澤剃毒,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布病袄,位于F島的核電站,受9級(jí)特大地震影響赘阀,放射性物質(zhì)發(fā)生泄漏益缠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一基公、第九天 我趴在偏房一處隱蔽的房頂上張望幅慌。 院中可真熱鬧,春花似錦酌媒、人聲如沸欠痴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喇辽。三九已至,卻和暖如春雨席,著一層夾襖步出監(jiān)牢的瞬間菩咨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工陡厘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抽米,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓糙置,卻偏偏與公主長得像云茸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谤饭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容