Swift 的Error 是個Protocol 其目的是為了讓開發者們可以自訂屬於自己的Error,只要Conform Error 就可以了
最常見的運用是在API回傳的結果,Swift 也有一個叫Result的 Enum ,它的結構如下
@frozen enum Result<Success, Failure> where Failure : Error
Failure必須要Conform Error的,換句話說只要 Conform Error的就可以丟進去,就可以自訂一個Error叫 userInfoError
enum userInfoError: Error {
case wrongName
case wrongFormal
case overLimit
}
使用的時候讓API的回傳值是
Result<Bool, userInfoError>
像 Alamofire 就是使用Result做為回傳值,Result對於接收端來說非常好用,因為它是Enum所以可以用Switch 來決定下一步應該要怎麼做
switch result {
case .success:
print ("Success")
case .failure(let error) :
switch error {
case .wrongName:
print ("wrong Name")
case .wrongFormal:
print ("wrong Formal")
case overLimit:
print (" over Limit")
}
}
那如果想要從Swfit Error裡得到Error應該要怎麼做才好?
簡單來說,就是把它轉成NSError,來看一下NSError官方文件
NSError 是 Class 且 Conform Error,因此可以把Error 轉成 NSError 並取得Error code
在 Swift中可以使用Extension 的方式來為Error 進行擴充
extension Error {
var errorCode:Int? {
return (self as NSError).code
}
}
就可以使用 error.errorCode 的方式來取得 error code 了