Swift - 可选参数 (if/else) 和enum的用法

2024-05-04  本文已影响0人  nicaho

背景

当写请求接口的callback时,以前我更倾向于用以下这种方式

completion: (HTTPURLResponse?, Error?)

看起来没什么问题,只需要判断 error/ response 是否为nil就行

if let error = error {
}
else if response = response {
} 
else {
}

但是,当 completion: (Data?, HTTPURLResponse?, Error?) 如此形式时,上面的if/else 会变成多少种情况呢

if let error = error {
}
else if response = response {
} 
else if data = data {
}
else {
}

emmm...看起来就很不优雅,而且 Data?, HTTPURLResponse? 通常是互斥的吗

探讨

还有什么方式可以解决以上问题

这里,我们可以引入 enum
我们改为以下这种形式

enum HTTPClientResult {
    case success(Data, HTTPURLResponse)
    case failure(Error)
}

即,数据获取成功时,处理 Data 和 HTTPURLResponse;数据获取失败时,直接处理Error。这,通用也符合实际逻辑

上一篇 下一篇

猜你喜欢

热点阅读