[Swift 必備 Tips] SELECTOR

轉(zhuǎn)自?原文鏈接

@selector是 Objective-C 時代的一個關(guān)鍵字,它可以將一個方法轉(zhuǎn)換并賦值給一個SEL類型选脊,它的表現(xiàn)很類似一個動態(tài)的函數(shù)指針。在 Objective-C 時 selector 非常常用羊始,從設(shè)定 target-action浑吟,到自舉詢問是否響應(yīng)某個方法笙纤,再到指定接受通知時需要調(diào)用的方法等等,都是由 selector 來負(fù)責(zé)的组力。在 Objective-C 里生成一個 selector 的方法一般是這個樣子的:

一般為了方便省容,很多人會選擇使用@selector,但是如果要追求靈活的話燎字,可能會更愿意使用NSSelectorFromString的版本 -- 因?yàn)槲覀兛梢栽谶\(yùn)行時動態(tài)生成字符串蓉冈,從而通過方法的名字來調(diào)用到對應(yīng)的方法。

在 Swift 中沒有@selector了轩触,取而代之寞酿,從 Swift 2.2 開始我們使用#selector來從暴露給 Objective-C 的代碼中獲取一個 selector。類似地脱柱,在 Swift 里對應(yīng)原來SEL的類型是一個叫做Selector的結(jié)構(gòu)體伐弹。像上面的兩個例子在 Swift 中等效的寫法是:

和 Objective-C 時一樣,記得在callMeWithParam后面加上冒號 (:)榨为,這才是完整的方法名字惨好。多個參數(shù)的方法名也和原來類似,是這個樣子


最后需要注意的是随闺,selector 其實(shí)是 Objective-C runtime 的概念日川,如果你的 selector 對應(yīng)的方法只在 Swift 中可見的話 (也就是說它是一個 Swift 中的 private 方法),在調(diào)用這個 selector 時你會遇到一個 unrecognized selector 錯誤

這是錯誤的代碼

正確的做法是在private前面加上@objc關(guān)鍵字矩乐,這樣運(yùn)行時就能找到對應(yīng)的方法了龄句。

最后回论,值得一提的是,如果方法名字在方法所在域內(nèi)是唯一的話分歇,我們可以簡單地只是用方法的名字來作為#selector的內(nèi)容傀蓉。相比于前面帶有冒號的完整的形式來說,這么寫起來會方便一些:

但是职抡,如果在同一個作用域中存在同樣名字的兩個方法葬燎,即使它們的函數(shù)簽名不相同,Swift 編譯器也不允許編譯通過:

對于這種問題缚甩,我們可以通過將方法進(jìn)行強(qiáng)制轉(zhuǎn)換來使用:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谱净,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子擅威,更是在濱河造成了極大的恐慌岳遥,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裕寨,死亡現(xiàn)場離奇詭異,居然都是意外死亡派继,警方通過查閱死者的電腦和手機(jī)宾袜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驾窟,“玉大人庆猫,你說我怎么就攤上這事∩鹇纾” “怎么了月培?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長恩急。 經(jīng)常有香客問我杉畜,道長,這世上最難降的妖魔是什么衷恭? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任此叠,我火速辦了婚禮,結(jié)果婚禮上随珠,老公的妹妹穿的比我還像新娘灭袁。我一直安慰自己,他們只是感情好窗看,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布茸歧。 她就那樣靜靜地躺著,像睡著了一般显沈。 火紅的嫁衣襯著肌膚如雪软瞎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機(jī)與錄音铜涉,去河邊找鬼智玻。 笑死,一個胖子當(dāng)著我的面吹牛芙代,可吹牛的內(nèi)容都是我干的吊奢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼纹烹,長吁一口氣:“原來是場噩夢啊……” “哼页滚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铺呵,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤裹驰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后片挂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幻林,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年音念,在試婚紗的時候發(fā)現(xiàn)自己被綠了沪饺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡闷愤,死狀恐怖整葡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情讥脐,我是刑警寧澤遭居,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站旬渠,受9級特大地震影響俱萍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜告丢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一鼠次、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芋齿,春花似錦腥寇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至栅炒,卻和暖如春掂摔,著一層夾襖步出監(jiān)牢的瞬間术羔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工乙漓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留级历,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓叭披,卻偏偏與公主長得像寥殖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涩蜘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

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