合并空值运算符
2020-01-05 本文已影响0人
码农UP2U
今天继续学习 极客时间 上 张杰 老师的 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”