[Swift]從Error取得Error code的方式

戴萌
Jul 26, 2021

Swift 的Error 是個Protocol 其目的是為了讓開發者們可以自訂屬於自己的Error,只要Conform Error 就可以了

最常見的運用是在API回傳的結果,Swift 也有一個叫Result的 Enum ,它的結構如下

developer.apple — result

@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官方文件

developer.apple — 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 了

--

--