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への明示的なランタイムマッピングのCustomNSError
、LocalizedError
とRecoverableError
を必要としています。
詳細情報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ではアップルだけの「Error」を使うことはできず、 'CustomNSError'を使わなければなりません。 – Larme
私は'enum NetworkingError:Error {} 'のようなエラーを作成することができ、それはかなりうまく動作します。私はそのプロトコルをどうすればいいのか不思議です。 –