Swift创建NSError对象
我想创建一个错误对象以显示给用户。Swift创建NSError对象
let userInfo: [NSObject : AnyObject] =
[
"NSLocalizedDescriptionKey" : NSLocalizedString("Unauthorized", comment: ""),
"NSLocalizedFailureReasonErrorKey" : NSLocalizedString("Unauthorized", comment: "")
]
let err = NSError(domain: "ShiploopHttpResponseErrorDomain", code: httpResponse.statusCode, userInfo: userInfo)
print("Error in Post: \(err.localizedDescription)")
不幸的是,输出是:
Error in Post: The operation couldn’t be completed.(ShiploopHttpResponseErrorDomain error 401.)
我希望能够展示给他应该激活他的帐户的用户。有任何想法吗??
看起来你想要的(见字典键):
斯威夫特2
let userInfo: [NSObject : AnyObject] =
[
NSLocalizedDescriptionKey : NSLocalizedString("Unauthorized", value: "Please activate your account", comment: ""),
NSLocalizedFailureReasonErrorKey : NSLocalizedString("Unauthorized", value: "Account not activated", comment: "")
]
斯威夫特3
let userInfo: [AnyHashable : Any] =
[
NSLocalizedDescriptionKey : NSLocalizedString("Unauthorized", value: "Please activate your account", comment: "") ,
NSLocalizedFailureReasonErrorKey : NSLocalizedString("Unauthorized", value: "Account not activated", comment: "")
]
然后创建错误对象两者都是wift 2或3这样的:
let err = NSError(domain: "ShiploopHttpResponseErrorDomain", code: 401, userInfo: userInfo)
println("Error in Post: \(err.localizedDescription)")
NSLocalizedDescriptionKey和NSLocalizedFailureReasonErrorKey是全局字符串变量,以及用户信息的字典内的密钥。该值是从指定什么稍有不同:
println(NSLocalizedDescriptionKey) //prints "NSLocalizedDescription"
println(NSLocalizedFailureReasonErrorKey) //prints "NSLocalizedFailureReason"
,我觉得是个好习惯通过右键单击(在这种情况下NSError)类和选择看文档“跳转到” Xcode的范围内。各种问题都可以这样回答。 :)
这里是一个具有一些附加堆栈跟踪信息来创建NSError对象我Helper方法:
class Helper {
static let errorDomain = "com.example.error"
static let errorFuncKey = "com.example.error.function"
static let errorFileKey = "com.example.error.file"
static let errorLineKey = "com.example.error.line"
static func error(_ message: String, record: Bool = true, function: String = #function, file: String = #file, line: Int = #line) -> NSError {
let customError = NSError(domain: errorDomain, code: 0, userInfo: [
NSLocalizedDescriptionKey: message,
errorFuncKey: function,
errorFileKey: file,
errorLineKey: line
])
// if (record) {
// customError.record()
// }
return customError
}
}
用法:
let error = Helper.error(NSLocalizedString("Unauthorized", comment: "Account not activated"))
通知 3在辅助类注释行,我用它来记录Crashlytics中的错误,您可以取消上面的注释并使用以下扩展名记录Crashlytics中的错误:
extension NSError {
func record() {
Crashlytics.sharedInstance().recordError(self)
}
}
为什么downvote,上面的代码不会创建NSError对象,isnt?,你怎么解决这个问题(如果确实有一个),而不知道为什么该人投票了吗?我从来没有投下他人对我回答的问题的回答,但我却投了其他人的票。不管怎么说,多谢拉! – AamirR
创建斯威夫特3一个非常简单的错误:
let error = NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey : "Object does not exist"])
这也可能是有意义从NSError继承,然后重写为localizedDescription吸气创建自己的错误类。 – ProgrammierTier
事情是我应该子类NSError能够定制“NSLocalizedDescriptionKey”来显示我的自定义消息。我是Swift和编程新手。所以我将不得不挖掘知道如何实现这个:) thx为您的回应 –