Значение типа «NSError» никогда не может быть нулевым, сравнение не допускается.

Я прохожу через блок NSError и получаю эту ошибку:

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

Это код, который я запросил у своего компонента, который должен возвращать ошибку, если что-то:

- (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 {

      }
    }

person Matrosov Alexander    schedule 29.07.2016    source источник
comment
Ваш параметр error не объявлен необязательным. Добавьте аннотацию nullable. developer.apple.com/swift/blog/?id=25   -  person Eric Aya    schedule 29.07.2016
comment
@EricD, да, вы правы, но, например, если я вызову - (void)findPeripheralForDevice:(Device *)device completion:(void (^)(NSError *error, BOOL needsConfigure))completion; напрямую, с is starnage проблем с ошибкой не возникнет.   -  person Matrosov Alexander    schedule 29.07.2016


Ответы (1)


Это потому, что ваш параметр ошибки в блоке завершения не является необязательным. и в Swift, если вы хотите проверить нулевые значения, отметьте параметр или переменные опционально.

для выше попробуйте это.

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

Добавляя ? или же ! к свойству или параметру он станет необязательным. и вы можете проверить нулевое значение.

person Bhautik Ziniya    schedule 29.07.2016
comment
да согласен с этим, работает для меня. странно, что если я вызываю блок из объективного кода c, проблем с NSError не возникает. - person Matrosov Alexander; 29.07.2016