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

背景

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容