我们在开发过程,经常会遇到,有多个 Optional 需要解包,并且在解包后进行逻辑处理,比如下方的示例:
func test(a: Int?, b: Int?) {
if let a = a, let b = b {
// 逻辑 A
} else if let a = a {
// 逻辑 B
} else if let b = b {
// 逻辑 C
} else {
// 逻辑 D
}
}
为了防止强制解包的存在,我们可能需要些很多个 if let 来进行解包,使得我们的代码在一定程度上不够优美。
那么,我们是不是可以利用 swift 中,Optional 本身是个 enum 的特性,来对上述代码进行优化呢?
答案是可以的。我们可以这么写:
func test(A: Int?, B: Int?) {
switch (A, B) {
case (.some(let a), .some(let b)):
// 逻辑 A
case (.some(let a), .none):
// 逻辑 B
case (.none, .some(let b)):
// 逻辑 C
case (.none, .none):
// 逻辑 D
}
}
这样,我们在对多个 Optional 进行解包时,就无需写很多 if let 了,可以使用 switch 来代替。