2014-11-21 160 views
3

我遇到了這段代碼,我無法弄清楚這兩個問號是什麼意思?這兩個問號是什麼意思?

這個變量的定義看起來像下面:

var featureImageSizeOptional: CGSize? 

,這讓我感到困惑的代碼是:

let featureImageSize = featureImageSizeOptional ?? CGSizeZero 

回答

10

這是合併運算。如果它不爲零,它將返回第一個表達式(featureImageSizeOptional)。如果第一個表達式爲零,則運算符返回第二個表達式(CGSizeZero)。

有關更多信息,請參閱the Language Guide

3

運算符不'返回第一個表達式' - 它返回第一個表達式的解包值(如果它不是零)。從蘋果公司的文件(重點煤礦):

的零合併運算(A?B)解開可選一個如果 包含一個值,或返回默認值b如果a是。 表達式a始終是可選類型。表達式b必須 匹配存儲在a內部的類型。

的零合併運算符是下面的代碼簡寫:

A =零? a!:乙

上面的代碼使用三元條件運算符和*被迫 展開(!a)至訪問包裹在裏面一個值時一個不是 零*,並返回b否則爲。 nil合併運算符提供了一種更加優雅的方式來封裝這個條件檢查和以簡明易讀的形式打包的 。