// 🌰🌰🌰
let c = a ?? b
a 和 b 最多只有 1 个 ? 的情况
- 如果 a 不为nil,就返回 a
- 如果 a 为nil,就返回 b
- 如果 b 不是可选项,返回 a 时会自动解包
- 如果 a 不是可选项,b 是可选项,会把 a 包装成可选项返回
也就是说:c 的类型则是由 b 的类型来决定
a 和 b 多个 ? 的情况
a 不为 nil
a 的 ? 比 b 多
最后返回a 的 ? 数量 - 1次包装的 a
a 的 ? 不比 b 多
最后返回b 的 ? 数量次包装的 a
a 为 nil
a 的 ? 比 b 多
最后返回a 的 ? 数量 - 1次包装的 b
a 的 ? 比 b 少
最后返回b 的 ? 数量 - 1次包装的 a
a 的 ? 跟 b 一样
直接返回 b
PS:直接查看??的源码即可明了,简单来说就是谁的?数量多,进入函数体内都会包装多少次,最后以?数量-1次包装返回。