Swift creating NSError Object
Looks like you want (see dictionary keys):
Swift 2
let userInfo: [NSObject : AnyObject] =[ NSLocalizedDescriptionKey : NSLocalizedString("Unauthorized", value: "Please activate your account", comment: ""), NSLocalizedFailureReasonErrorKey : NSLocalizedString("Unauthorized", value: "Account not activated", comment: "")]
Swift 3
let userInfo: [AnyHashable : Any] = [ NSLocalizedDescriptionKey : NSLocalizedString("Unauthorized", value: "Please activate your account", comment: "") , NSLocalizedFailureReasonErrorKey : NSLocalizedString("Unauthorized", value: "Account not activated", comment: "") ]
Then create the error object in both swift 2 or 3 like this:
let err = NSError(domain: "ShiploopHttpResponseErrorDomain", code: 401, userInfo: userInfo)println("Error in Post: \(err.localizedDescription)")
NSLocalizedDescriptionKey and NSLocalizedFailureReasonErrorKey are global String variables, and the keys inside of the userInfo dictionary. The values are slightly different from what you specified:
println(NSLocalizedDescriptionKey) //prints "NSLocalizedDescription"println(NSLocalizedFailureReasonErrorKey) //prints "NSLocalizedFailureReason"
I find it good practice to look at the documentation by right-clicking the class (NSError in this case) and selecting "Jump To Definition" within xcode. All kinds of questions can be answered this way. :)
Creating an error is as simple as following line:
let error = NSError(domain: "com.example.error", code: 0, userInfo: [NSLocalizedDescriptionKey: "message"])
If you need additional stack trace information, use following method:
func error(_ message: String, code: Int = 0, domain: String = "com.example.error", function: String = #function, file: String = #file, line: Int = #line) -> NSError { let functionKey = "\(domain).function" let fileKey = "\(domain).file" let lineKey = "\(domain).line" let error = NSError(domain: domain, code: code, userInfo: [ NSLocalizedDescriptionKey: message, functionKey: function, fileKey: file, lineKey: line ]) // Crashlytics.sharedInstance().recordError(error) return error}
Usage:
let localizedErrorMessage: String = NSLocalizedString("Unauthorized", comment: "Account not activated")let error = error(localizedErrorMessage)