【问题标题】:Swift creating NSError ObjectSwift 创建 NSError 对象
【发布时间】:2016-01-14 11:56:04
【问题描述】:

我正在尝试创建一个错误对象以显示给用户。

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

我希望能够向用户表明他应该激活他的帐户。有什么想法吗??

【问题讨论】:

    标签: ios swift nserror


    【解决方案1】:

    看起来像你想要的(查看字典键):

    斯威夫特 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: "")
            ]
    

    然后像这样在 swift 2 或 3 中创建错误对象:

    let err = NSError(domain: "ShiploopHttpResponseErrorDomain", code: 401, userInfo: userInfo)
    println("Error in Post: \(err.localizedDescription)")
    

    NSLocalizedDescriptionKey 和 NSLocalizedFailureReasonErrorKey 是全局字符串变量,是 userInfo 字典中的键。这些值与您指定的值略有不同:

    println(NSLocalizedDescriptionKey) //prints "NSLocalizedDescription"
    println(NSLocalizedFailureReasonErrorKey) //prints "NSLocalizedFailureReason"
    

    我发现通过右键单击类(在本例中为 NSError)并在 xcode 中选择“跳转到定义”来查看文档是一种很好的做法。各种问题都可以这样回答。 :)

    【讨论】:

    • 通过从 NSError 继承然后覆盖本地化描述的 getter 来创建自己的错误类也可能是有意义的。
    • 问题是我应该继承 NSError 以便能够自定义“NSLocalizedDescriptionKey”来显示我的自定义消息。我是 Swift 和编程的新手。所以我将不得不挖掘知道如何实现这个:)谢谢你的回应
    【解决方案2】:

    在 Swift 3 中创建一个非常简单的错误:

    let error = NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey : "Object does not exist"])
    

    【讨论】:

      【解决方案3】:

      创建错误就像以下行一样简单:

      let error = NSError(domain: "com.example.error", code: 0, userInfo: [NSLocalizedDescriptionKey: "message"])
      

      如果您需要额外的堆栈跟踪信息,请使用以下方法:

      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
      }
      

      用法:

      let localizedErrorMessage: String = NSLocalizedString("Unauthorized", comment: "Account not activated")
      let error = error(localizedErrorMessage)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-26
        • 2015-07-06
        • 1970-01-01
        • 2015-03-11
        • 2019-10-28
        • 2015-12-17
        • 2023-04-03
        • 1970-01-01
        相关资源
        最近更新 更多