Swift5.1学习随笔之空合并运算符??

public func ?? (optional: T?, defaultValue: @autoclosure () throws -> T?) rethrows -> T?
public func ?? (optional: T?, defaultValue: @autoclosure () throws -> T) rethrows -> T

写法:a ?? b

  1. a 是可选项
  2. b 是可选项 或者 不是可选项
  3. ba 的存储类型必须相同
    • 如果 a 不为nil,就返回 a
    • 如果 anil,就返回 b
    • 如果 b 不是可选项,返回 a 时候会自动解包

举例子:

如果 a 不为nil,就返回 a

var a: Int? = 1
var b: Int? = 2
let c = a ?? b // c是Int?,Optional(1)

如果 anil,就返回 b

var a: Int? = nil
var b: Int? = 2
let c = a ?? b // c是Int?,Optional(2)

如果 anil,就返回 b

var a: Int? = nil
var b: Int? = nil
let c = a ?? b // c是Int?,nil

如果 a 不为nil,就返回 a
如果 b 不是可选项,返回 a 时候会自动解包

var a: Int? = 1
var b: Int = 2
let c = a ?? b // c是Int,1

如果 anil,就返回 b

var a: Int? = nil
var b: Int = 2
let c = a ?? b // c是Int,2

多个空运算符一起使用

var a: Int? = 1
var b: Int? = 2
let c = a ?? b ?? 3 // c是Int, 1

解析:由于最右边是3,所以c的类型肯定是Int类型
先看 a ?? b
由于 a 是可选类型,且不为nil,同时 b 也是可选类型,所以 a ?? b 会返回可选类型的 a
再看 a ?? 3
由于 a 不为 nil,所以返回 a,但是 3 不是可选类型,所以 a 会自动解包为 1

var a: Int? = nil
var b: Int? = 2
let c = a ?? b ?? 3 // c是Int, 2
var a: Int? = nil
var b: Int? = nil
let c = a ?? b ?? 3 // c是Int, 3

你可能感兴趣的:(Swift5.1学习随笔之空合并运算符??)