背景
当写请求接口的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。这,通用也符合实际逻辑
网友评论