CustomNSError
協議做什麼,爲什麼我應該採用它?
由蘋果公司提供的文件只規定:CustomNSError協議做了什麼,我爲什麼要採用它?
Describes an error type that specifically provides a domain, code, and user-info dictionary.
我已經搜索在谷歌,但找不到與我的問題有什麼。
CustomNSError
協議做什麼,爲什麼我應該採用它?
由蘋果公司提供的文件只規定:CustomNSError協議做了什麼,我爲什麼要採用它?
Describes an error type that specifically provides a domain, code, and user-info dictionary.
我已經搜索在谷歌,但找不到與我的問題有什麼。
Every type that conforms to the
Error
protocol is implicitly bridged toNSError
. This has been the case since Swift 2, where the compiler provides a domain (i.e., the mangled name of the type) and code (based on the discriminator of the enumeration type).
所以,你需要CustomNSError
,LocalizedError
和RecoverableError
顯式運行映射NSError。
更多信息here。
實施例:
// Errors
enum ServiceError: Int, Error, CustomNSError {
case unknownError = -1000
case serverReturnBadData
//MARK: - CustomNSError
static var errorDomain: String = "reverse.domain.service.error"
var errorCode: Int { return self.rawValue }
var errorUserInfo: [String : Any] { return [:] } //TODO: Return something meaningful here
}
extension NSError {
var serviceError: ServiceError? {
return (self.domain == ServiceError.errorDomain
? ServiceError(rawValue: self.code)
: nil)
}
convenience init(serviceError: ServiceError) {
self.init(
domain: ServiceError.errorDomain,
code: serviceError.rawValue,
userInfo: serviceError.errorUserInfo)
}
}
在Objective-C,我們使用'NSError',我們可以將它們用於定製。很顯然,在Swift中,你不能使用僅用於Apple的等效'Error',而必須使用'CustomNSError'。 – Larme
我可以創建錯誤,如'網絡錯誤:錯誤{}',它工作得很好。我只是好奇如何處理該協議? –