2016-12-16 125 views
2

CustomNSError協議做什麼,爲什麼我應該採用它?
由蘋果公司提供的文件只規定:CustomNSError協議做了什麼,我爲什麼要採用它?

Describes an error type that specifically provides a domain, code, and user-info dictionary.

我已經搜索在谷歌,但找不到與我的問題有什麼。

+0

在Objective-C,我們使用'NSError',我們可以將它們用於定製。很顯然,在Swift中,你不能使用僅用於Apple的等效'Error',而必須使用'CustomNSError'。 – Larme

+0

我可以創建錯誤,如'網絡錯誤:錯誤{}',它工作得很好。我只是好奇如何處理該協議? –

回答

1

Every type that conforms to the Error protocol is implicitly bridged to NSError . 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).

所以,你需要CustomNSErrorLocalizedErrorRecoverableError顯式運行映射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) 
    } 
} 
相關問題