背景
當(dāng)寫請(qǐng)求接口的callback時(shí)吼具,以前我更傾向于用以下這種方式
completion: (HTTPURLResponse?, Error?)
看起來(lái)沒(méi)什么問(wèn)題元潘,只需要判斷 error/ response 是否為nil就行
if let error = error {
}
else if response = response {
}
else {
}
但是铡俐,當(dāng) completion: (Data?, HTTPURLResponse?, Error?)
如此形式時(shí)站楚,上面的if/else
會(huì)變成多少種情況呢
if let error = error {
}
else if response = response {
}
else if data = data {
}
else {
}
emmm...看起來(lái)就很不優(yōu)雅乾蛤,而且 Data?, HTTPURLResponse? 通常是互斥的嗎
探討
還有什么方式可以解決以上問(wèn)題
這里允趟,我們可以引入 enum
我們改為以下這種形式
enum HTTPClientResult {
case success(Data, HTTPURLResponse)
case failure(Error)
}
即蔑匣,數(shù)據(jù)獲取成功時(shí)恩急,處理 Data 和 HTTPURLResponse;數(shù)據(jù)獲取失敗時(shí)氯庆,直接處理Error蹭秋。這,通用也符合實(shí)際邏輯