自定义 NSError 奇怪的行为 Swift

Posted

技术标签:

【中文标题】自定义 NSError 奇怪的行为 Swift【英文标题】:Custom NSError weird behaviour Swift 【发布时间】:2014-12-16 21:17:01 【问题描述】:

在 Swift 中,我有一个自定义的 NSError,我需要获取错误 userInfo 字典并稍后添加内容,但在 assign 行中它是 nil,但随后 error.userInfo 有一个对象...

error.userInfo 为 nil:

class MyError: NSError 

    init(error: NSError)  
      var newUserInfo = error.userInfo

      ...newUserInfo is nil...
      super.init(...)
    


如果我将它分配 2 次,它就可以工作(我知道缺少一些东西但是什么?)

init(error: NSError)  
  var newUserInfo = error.userInfo
  newUserInfo = error.userInfo

  ...newUserInfo now contains a dictionary...

为什么?

【问题讨论】:

newUserInfo 是一个实例变量,还是只是一个局部变量?你可能要声明两次吗? 这是一个局部变量,我只在这里声明它 刚刚试了一下,分配没有问题,能不能把剩下的代码贴出来。 你怎么知道它是零?您的代码不会对值进行任何测试或记录。 【参考方案1】:

这在我看来可能编译器有问题,但如果不查看更多代码就很难判断。无论如何,如果您使用条件转换,这种事情更容易调试。 userInfo 在 swift 中是 Dictionary<NSObject: AnyObject>?;如果您是从 Cocoa API 获得的,您可以执行以下操作:

if let userInfo = error.userInfo as? [NSObject: NSObject] 
    // modify and assign values as necessary

这至少可以更清楚地说明问题出在哪里。

【讨论】:

这种方法唯一可能出现的问题是,您可能会在一个更有用的地方得到一个空字典,以便理解 userInfo 为 nil。

以上是关于自定义 NSError 奇怪的行为 Swift的主要内容,如果未能解决你的问题,请参考以下文章

如何获取自定义单元格并通过 indexpath 使用它的自定义项 - swift3?

Xcode 9:好奇的自定义字体行为

Excel 自定义功能不适用于工作表

UIPickerView 自定义视图奇怪的行为

swift ios中的自定义谷歌地图标记图标图像

不同 API 上的奇怪自定义 SeekBar 可绘制行为