iOS Coding Tips[1]-缺省參數(shù)

關(guān)于iOS Coding過程中經(jīng)常遇到各種小問題或是一些疑惑,整理收集如下.

Coding Tip Collection [Via 500px]

缺省參數(shù)

今天在寫一個(gè)UILabel生成方法時(shí)官套,突然想到去年剛開始接觸Object-C時(shí)就曾一直疑惑,語言層級(jí)特性(語法糖)是否支持類似C#中缺省參數(shù)的功能?

缺省參數(shù)(Default Argument Value)惋嚎,顧名思義站刑,就是在聲明函數(shù)的某個(gè)參數(shù)的時(shí)候?yàn)橹付ㄒ粋€(gè)默認(rèn)值. 在調(diào)用該方法時(shí)要是傳入了這個(gè)參數(shù),則使用傳入的值绞旅,如果缺少這個(gè)輸入?yún)?shù),那么直接使用設(shè)定的默認(rèn)值進(jìn)行調(diào)用. 例如在C#語法中聲明一個(gè)缺省參數(shù)的方法:

缺省參數(shù)定義[C#]

調(diào)用方法時(shí)自由地選擇采用缺省的參數(shù)值,或者覆蓋參數(shù)缺省值:

調(diào)用方式[Via C#]

在方法聲明和調(diào)用時(shí)極大簡化語法中贝,代碼寫起來短小精悍,具有較高的自由性同時(shí)代碼也易讀理解.但其實(shí)Object-C語法層面本身并不支持缺省參數(shù)蝎土,自然沒法能夠直接實(shí)現(xiàn)類似C#語言中的寫法.但真的無法實(shí)現(xiàn)嗎?雖然語法層面不能直接支持绣否,其實(shí)是可以的只是有點(diǎn)繞.

笨一點(diǎn)的方式定義方法時(shí)聲明該參數(shù),在方法實(shí)現(xiàn)時(shí)內(nèi)部處理默認(rèn)值.類似:

方式一[Object - C]

如上我們定義一個(gè)UILabel蒜撮,默認(rèn)文字顏色是紅色,但不是每次都會(huì)定義, 那在定義方法時(shí)做一個(gè)內(nèi)部約定,當(dāng)defineColor傳入為nil取逾,就是取其默認(rèn)值為紅色苹支,如果為非nil時(shí)則正常賦值. 這種寫法偏向于在方法內(nèi)定義了一個(gè)約定,邏輯簡單债蜜,但在方法聲明層面上如果不知道隱藏潛在約定代碼邏輯或者沒有很好注釋說明,對(duì)調(diào)用者來說跟defineColor和orginStr兩個(gè)參數(shù)并沒有什么區(qū)別的.難道沒有更好的方式嗎? 有.

方式二[Objec - C]

改良一下替代的方法儒洛,其實(shí)是定義兩個(gè)方法, 一個(gè)方法聲明時(shí)包含所有缺省參數(shù)狼速,用另外一個(gè)則不包含缺省參數(shù)方法調(diào)用前者即可. 這種方式優(yōu)點(diǎn)將使用默認(rèn)值的參數(shù)放在函數(shù)的參數(shù)列表的末尾寫法, 確保了所有調(diào)用函數(shù)的非默認(rèn)參數(shù)使用相同的順序, 并明確地表示在每種情況下相同的函數(shù)調(diào)用. ?在聲明層面能夠很好區(qū)分方法實(shí)現(xiàn), 而不存在額外的歧義. 這種折中的方式缺點(diǎn)是同一個(gè)功能實(shí)現(xiàn)多了一個(gè)不同的入口, 一定程度增加代碼的復(fù)雜度. Objective-C 由于語法的特點(diǎn)幾乎無法在不大幅改動(dòng)的情況下很好地實(shí)現(xiàn)缺省參數(shù).Objective-C 社區(qū)詬病很多年的這一特性, 而作為其的繼任者Swift語言是否能夠在語法上友好的支持? 答案是自然肯定的.

Playground中實(shí)現(xiàn)[Swift]

如上可見Swift能夠完美的實(shí)現(xiàn)方法的缺省參數(shù).但如果在深入一點(diǎn),你會(huì)有驚喜發(fā)現(xiàn).在C#中我們知道方法實(shí)現(xiàn)缺省參數(shù)并沒有問題浅浮,而不要忘了語法上還有一個(gè)限制條件:

調(diào)用時(shí)你只能從最后一個(gè)參數(shù)開始進(jìn)行省略, 如果你要省略一個(gè)參數(shù),你必須省略它后面所有的參數(shù)滚秩,即:帶缺省值的參數(shù)必須放在參數(shù)表的最后面.

類似如果我在C#這樣寫法:

缺省參數(shù)聲明順序[C#]

缺省參數(shù)聲明是寫在最前面, 編譯器會(huì)直接報(bào)錯(cuò),而相反Swift更為自由本股,則沒有類似C#這樣語法限制桐腌,如果同樣語法在Swift則是可以編譯通過的拄显,如下:

缺省參數(shù)聲明順序[Swift]

正是因?yàn)?b>Swift語法中沒有"默認(rèn)參數(shù)之后不能再出現(xiàn)無默認(rèn)值的參數(shù)"這樣的規(guī)則案站,上面方法的聲明在 Swift 里都是合法可用的.

當(dāng)然針對(duì)Swift中值得一提的是,默認(rèn)參數(shù)都是需要外部標(biāo)簽的承边,如果沒有指定外部標(biāo)簽,那么 Swift 會(huì)默認(rèn)自動(dòng)加上同名的標(biāo)簽石挂,也就相當(dāng)于在參數(shù)聲明前加上井號(hào)#。實(shí)際上我們聲明的sayHello和sayHello1的符號(hào)是這樣的:

外部標(biāo)簽[Swift]

外部標(biāo)簽名意義在于痹愚,不像其他普通方法調(diào)用那樣省掉第一個(gè)參數(shù)標(biāo)簽名,這是為了不產(chǎn)生參數(shù)命名上的歧義.

關(guān)于缺省參數(shù)演示的代碼在這里[DefaultArgumengSample github]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末城瞎,一起剝皮案震驚了整個(gè)濱河市疾瓮,隨后出現(xiàn)的幾起案子脖镀,更是在濱河造成了極大的恐慌狼电,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件强窖,死亡現(xiàn)場(chǎng)離奇詭異削祈,居然都是意外死亡翅溺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門优幸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褪猛,“玉大人,你說我怎么就攤上這事伊滋。” “怎么了笑旺?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長关噪。 經(jīng)常有香客問我物舒,道長色洞,這世上最難降的妖魔是什么冠胯? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任锦针,我火速辦了婚禮,結(jié)果婚禮上悉盆,老公的妹妹穿的比我還像新娘。我一直安慰自己焕盟,他們只是感情好宏粤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绍哎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪崇堰。 梳的紋絲不亂的頭發(fā)上涩咖,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天繁莹,我揣著相機(jī)與錄音,去河邊找鬼蒋困。 笑死,一個(gè)胖子當(dāng)著我的面吹牛雪标,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播告抄,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼嵌牺,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了逆粹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤阿浓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后芭毙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡退敦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年蚣抗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钝域。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡两蟀,死狀恐怖网梢,靈堂內(nèi)的尸體忽然破棺而出赂毯,到底是詐尸還是另有隱情拣宰,我是刑警寧澤烦感,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站手趣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏绿渣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一姜胖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧右莱,春花似錦、人聲如沸慢蜓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饲鄙。三九已至圆雁,卻和暖如春忍级,著一層夾襖步出監(jiān)牢的瞬間伪朽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工朴肺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戈稿。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓讶舰,卻偏偏與公主長得像鞍盗,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子般甲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫敷存、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,093評(píng)論 4 62
  • 一位美國教師在中國某醫(yī)學(xué)院講了這么一個(gè)故事: 在暴風(fēng)雨后的一個(gè)早晨锚烦,一位男士在海邊散步,注意到沙灘的淺水洼里涮俄,有許...
    孤生竹簽閱讀 88評(píng)論 0 2
  • 你是我的夢(mèng),是指尖劃過晴空的白芒刘离,是低頭垂眼下泛紅的臉頰,是露水滴落深潭敲擊心臟的聲音硫惕,聲聲叩擊心靈,你是我的夢(mèng)恼除,...
    喜悅悅閱讀 282評(píng)論 1 1
  • 文章很短舀患,文筆不好,只是想寫下那些與你的記憶聊浅。 我的青春期晚,所以你是我的初戀低匙,當(dāng)我還對(duì)男女那些事不放在心上時(shí),你...
    早鳥古蟲閱讀 325評(píng)論 0 0