空合運(yùn)算符(Nil Coalescing Operator)、區(qū)間運(yùn)算符

空合運(yùn)算符(Nil Coalescing Operator)

空合運(yùn)算符(a ?? b)將對可選類型a進(jìn)行空判斷,如果a包含一個值就進(jìn)行解封桃焕,否則就返回一個默認(rèn)值b.這個運(yùn)算符有兩個條件:

  • 表達(dá)式a必須是Optional類型
  • 默認(rèn)值b的類型必須要和a存儲值的類型保持一致

空合并運(yùn)算符是對以下代碼的簡短表達(dá)方法
<pre><code>
a != nil ? a! : b</code></pre>
上述代碼使用了三目運(yùn)算符亏钩。當(dāng)可選類型a的值不為空時莲绰,進(jìn)行強(qiáng)制解封(a!)訪問a中值,反之當(dāng)a中值為空時姑丑,返回默認(rèn)值b蛤签。無疑空合運(yùn)算符(??)提供了一種更為優(yōu)雅的方式去封裝條件判斷和解封兩種行為,顯得簡潔以及更具可讀性栅哀。

<pre><code>
注意: 如果a為非空值(non-nil),那么值b將不會被估值震肮。這也就是所謂的短路求值。
</code></pre>
下文例子采用空合并運(yùn)算符留拾,實(shí)現(xiàn)了在默認(rèn)顏色名和可選自定義顏色名之間抉擇:
<pre><code>let defaultColorName = "red"
var userDefinedColorName:String? //默認(rèn)值為nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
//userDefinedColorName的值為空 戳晌,所以colorNameToUse的值為red</code></pre>userDefinedColorName變量被定義為一個可選字符串類型,默認(rèn)值為nil痴柔。由于userDefinedColorName是一個可選類型沦偎,我們可以使用空合運(yùn)算符去判斷其值。在上一個例子中,通過空合運(yùn)算符為一個名為colorNameToUse的變量賦予一個字符串類型初始值豪嚎。 由于userDefinedColorName值為空鸿捧,因此表達(dá)式userDefinedColorName ?? defaultColorName返回默認(rèn)值,即red疙渣。

另一種情況匙奴,分配一個非空值(non-nil)給 userDefinedColorName,再次執(zhí)行空合運(yùn)算妄荔,運(yùn)算結(jié)果為封包在userDefaultColorName中的值泼菌,而非默認(rèn)值。

<pre><code>userDefinedColorName = "green"
colorNameToUse = userDefinedColorName ?? defaultColorName
//userDefinedColorName非空啦租,因此colorNameToUsede的值為綠色</code></pre>


區(qū)間運(yùn)算符

Swift 提供了兩個方便表達(dá)一個區(qū)間的值的運(yùn)算符哗伯。

閉區(qū)間運(yùn)算符

閉區(qū)間運(yùn)算符(a...b)定義一個包含從a到b(包括a和b)的所有值的區(qū)間,b必須大于a篷角。 ? 閉區(qū)間運(yùn)算符在迭代一個區(qū)間的所有值時是非常有用的焊刹,如在for-in循環(huán)中:<pre><code>
for index in 1...5 {
println("\(index) * 5 = \(index * 5)")
}
// 1 * 5 = 5
// 2 * 5 = 10
// 3 * 5 = 15
// 4 * 5 = 20
// 5 * 5 = 25</code></pre>關(guān)于for-in,請看控制流恳蹲。
半開區(qū)間運(yùn)算符
半開區(qū)間(a..<b)定義一個從a到b但不包括b的區(qū)間虐块。 之所以稱為半開區(qū)間,是因?yàn)樵搮^(qū)間包含第一個值而不包括最后的值嘉蕾。
半開區(qū)間的實(shí)用性在于當(dāng)你使用一個0始的列表(如數(shù)組)時贺奠,非常方便地從0數(shù)到列表的長度。
<pre><code>
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..< count {
println("第\(i + 1) 個人叫 \(names[i])")
}
// 第 1 個人叫 Anna
// 第 2 個人叫 Alex
// 第 3 個人叫 Brian
// 第 4 個人叫 Jack</code></pre>數(shù)組有4個元素错忱,但0..<count只數(shù)到3(最后一個元素的下標(biāo))儡率,因?yàn)樗前腴_區(qū)間。關(guān)于數(shù)組以清,請查閱數(shù)組儿普。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市掷倔,隨后出現(xiàn)的幾起案子眉孩,更是在濱河造成了極大的恐慌,老刑警劉巖今魔,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勺像,死亡現(xiàn)場離奇詭異,居然都是意外死亡错森,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門篮洁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涩维,“玉大人,你說我怎么就攤上這事⊥卟” “怎么了蜗侈?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長睡蟋。 經(jīng)常有香客問我踏幻,道長,這世上最難降的妖魔是什么戳杀? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任该面,我火速辦了婚禮,結(jié)果婚禮上信卡,老公的妹妹穿的比我還像新娘隔缀。我一直安慰自己,他們只是感情好傍菇,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布猾瘸。 她就那樣靜靜地躺著,像睡著了一般丢习。 火紅的嫁衣襯著肌膚如雪牵触。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天咐低,我揣著相機(jī)與錄音荒吏,去河邊找鬼。 笑死渊鞋,一個胖子當(dāng)著我的面吹牛绰更,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锡宋,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼儡湾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了执俩?” 一聲冷哼從身側(cè)響起徐钠,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎役首,沒想到半個月后尝丐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衡奥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年爹袁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矮固。...
    茶點(diǎn)故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡失息,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盹兢,我是刑警寧澤邻梆,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站绎秒,受9級特大地震影響浦妄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜见芹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一剂娄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辆童,春花似錦宜咒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至庭砍,卻和暖如春场晶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怠缸。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工诗轻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人揭北。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓扳炬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搔体。 傳聞我的和親對象是個殘疾皇子恨樟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評論 2 361

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