【发布时间】:2014-11-21 16:14:38
【问题描述】:
我遇到了这段代码,不知道这两个问号是什么意思?
这个变量的定义如下:
var featureImageSizeOptional: CGSize?
让我困惑的代码是:
let featureImageSize = featureImageSizeOptional ?? CGSizeZero
【问题讨论】:
标签: swift
我遇到了这段代码,不知道这两个问号是什么意思?
这个变量的定义如下:
var featureImageSizeOptional: CGSize?
让我困惑的代码是:
let featureImageSize = featureImageSizeOptional ?? CGSizeZero
【问题讨论】:
标签: swift
这是合并操作符。如果它不为 nil,则返回第一个表达式 (featureImageSizeOptional)。如果第一个表达式为 nil,则运算符返回第二个表达式 (CGSizeZero)。
请参阅the Language Guide 了解更多信息。
【讨论】:
该运算符不“返回第一个表达式”——它返回第一个表达式的展开值(如果它不是 nil)。来自 Apple 文档(重点是我的):
nil 合并运算符 (a ?? b) unwraps 一个可选的 a 如果它 包含一个值,如果 a 为 nil,则返回一个默认值 b。这 表达式 a 始终是可选类型。表达式 b 必须 匹配存储在 a 中的类型。
nil 合并运算符是以下代码的简写:
a != 无? a!:b
上面的代码使用了三元条件运算符和*forced 当 a 不是时,展开 (a!) 以访问包装在 a 中的值 nil*,否则返回b。 nil 合并运算符提供了一个 更优雅的方式来封装这种条件检查和 以简洁易读的形式展开。
【讨论】: