2016-12-16 8 views
2

CustomNSErrorプロトコルは何を行いますか、なぜそれを採用する必要がありますか?アップルが提供する
ドキュメントは述べている:私は既にGoogleで検索、しかし、そこに私の質問に関連する何かを見つけることができませんでしたCustomNSErrorプロトコルは何を行い、なぜそれを採用すべきですか?

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

+0

のObjective-Cでは、私たちは 'NSError'を使用して、我々は、カスタマイズのためにそれらを使用することができます。どうやら、Swiftではアップルだけの「Error」を使うことはできず、 'CustomNSError'を使わなければなりません。 – Larme

+0

私は'enum NetworkingError:Error {} 'のようなエラーを作成することができ、それはかなりうまく動作します。私はそのプロトコルをどうすればいいのか不思議です。 –

答えて

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).

だからあなたはNSErrorへの明示的なランタイムマッピングのCustomNSErrorLocalizedErrorRecoverableErrorを必要としています。

詳細情報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) 
    } 
} 
関連する問題