2014-11-21 125 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合并运算符提供了一种更加优雅的方式来封装这个条件检查和以简明易读的形式打包的 。