【问题标题】:Value of type 'NSError' can never be nil, comparison isn't allowed'NSError' 类型的值永远不能为零,不允许比较
【发布时间】:2016-07-29 09:18:11
【问题描述】:

我通过块 NSError 并得到这个错误:

Value of type 'NSError' can never be nil, comparison isn't allowed

这是我从我的组件请求的代码,如果 smth 应该返回错误:

- (void)findPeripheralForDevice:(Device *)device completion:(void (^)(NSError *error, BOOL needsConfigure))completion;

这是我的组件界面:

func findDeviceWithSerialNumber(serial: String, completion:(error: NSError, needsConfigure: Bool) -> Void)

这就是我的代码的样子:

 wirlessService.findDeviceWithSerialNumber(serial) { (error, needsConfigure) in

      if error != nil { // here the error described above occurred

      } else {

      }
    }

【问题讨论】:

  • 您的error 参数未声明为可选参数。添加nullable 注释。 developer.apple.com/swift/blog/?id=25
  • @EricD,是的,你是对的,但是例如,如果我直接调用 - (void)findPeripheralForDevice:(Device *)device completion:(void (^)(NSError *error, BOOL needsConfigure))completion;,则 is starnage 没有错误问题

标签: swift swift2 nserror


【解决方案1】:

那是因为您在完成块中的错误参数不是可选类型。如果您想检查 nil 值,请快速使用 Optional 标记您的参数或变量。

以上试试这个。

func findDeviceWithSerialNumber(serial: String, completion:(error: NSError?, needsConfigure: Bool) -> Void)

通过添加 ?或者 !到属性或参数它将变为可选。你可以检查零值。

【讨论】:

  • 是的,同意,对我有用。奇怪的是,如果我从目标 c 代码中调用块,则 NSError 没有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 2014-09-05
  • 2020-12-02
  • 2019-04-28
相关资源
最近更新 更多