Skip to content

Instantly share code, notes, and snippets.

@sgr-ksmt
Last active February 26, 2016 02:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sgr-ksmt/9f79db2bf70595f89f4c to your computer and use it in GitHub Desktop.
Save sgr-ksmt/9f79db2bf70595f89f4c to your computer and use it in GitHub Desktop.
Enhanced ErrorType in Swift. blog; http://blog.sgr-ksmt.org/2016/02/26/enhanced_error_type/ (日本語)
public protocol EnhancedErrorType: ErrorType, CustomStringConvertible {
var domain: String { get }
var code: Int { get }
var userInfo: [NSObject: AnyObject]? { get }
}
extension EnhancedErrorType {
var _domain: String {
return domain
}
var _code: Int {
return code
}
var domain: String {
return String(reflecting: self.dynamicType)
}
var code: Int {
return 0
}
var userInfo: [NSObject: AnyObject]? {
return nil
}
public func toNSError() -> NSError {
return NSError(domain: domain, code: code, userInfo: userInfo)
}
var description: String {
return "\(toNSError())"
}
}
@sgr-ksmt
Copy link
Author

Usage

enum SomeErrors: EnhancedErrorType {
    case ErrorA
    case ErrorB
    case ErrorC(String)

    var domain: String {
        return "SomeErrorCustomDomain"
    }

    var code: Int {
        switch self {
        case .ErrorA: return -10000
        case .ErrorB: return -10001
        case .ErrorC( _): return -10002
        }
    }

    var userInfo: [NSObject: AnyObject]? {
        switch self {
        case .ErrorA:
            return [NSLocalizedDescriptionKey: "ErrorA occurred."]
        case .ErrorB:
            return [NSLocalizedDescriptionKey: "ErrorB occurred."]
        case .ErrorC(let msg):
            return [NSLocalizedDescriptionKey: "ErrorC occurred. message: \(msg)"]
        }
    }

}

func doSomething() throws {
    throw SomeErrors.ErrorC("wahaha")
}

do {
    try doSomething()
} catch let error {
    print(error as NSError)
    print(error)
    print((error as! SomeErrors).toNSError())
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment