合并空值运算符

今天继续学习 极客时间张杰 老师的 Swift 的课程,看的真是辛苦,感觉讲的好慢。我这强迫症又不愿意跳着学。

合并空值运算符

合并空值运算符使用两个问号表示,类似 a ?? b,表示当 a 成立时结果为 a,否则为 b。这个运算符类似三目运算符,而且在其他语言中也有这种运算符。

简单的看一下这个运算符。

  • 合并空值运算符 a ?? b 如果可选项 a 有值则展开,如果没有值,是 nil,则返回默认值 b
  • 表达式 a 必须是一个可选类型。表达式 b 必须与 a 的存储类型相同(这个实际测试只是给出提示,并没有报错)
  • 实际上是三元运算符作用到 Optional 上的缩写 a != nil ? a! : b
  • 如果 a 的值是非空的,b 的值将不会被考虑,也就是合并空值运算符是短路的

代码示例

以下是一些合并空值的代码示例。

let aa: Int? = nil
let bb = 8
// 输出 8
print(aa ?? bb)

let aaa: String? = nil
// 输出 8
print(aaa ?? bb)

let aaaa: Int = 88
// 输出 88
print(aaaa ?? bb)   // 此句会有警告,原因是 aaaa 不是可选类型

let aaaaa: String = "abc"
print(aaaaa ?? bb)      // 此句会有警告,原因是 aaaaa 不是可选类型

func getNumber() -> Int {
    print("in getNumber")
    return 8
}

print(aaaa ?? getNumber())  // 此句会有警告,原因是 aaaa 不是可选类型
print(aa ?? getNumber())

// 两个可选类型做加法,使用合并空值运算,可以省去很多判断
func addTwoNumber(num1: Int?, num2: Int?) -> Int {
    return (num1 ?? 0) + (num2 ?? 0)
}

print(addTwoNumber(num1: nil, num2: nil))



我的微信公众号:“码农UP2U”

推荐阅读更多精彩内容