Я работаю с Objective-C в течение нескольких лет, но я все еще новичок в Swift.
В настоящее время я работаю над добавлением нового кода на основе Swift 5 в существующий Objective-C.проект, который использует определенные константы для кодов ошибок и NSError
объекты для распространения ошибок.
Как я могу использовать NSError.code
в Swift?
Код Obective-C:
#define someStrangeError_Code 1000
typedef void(^CompletionHandler)(BOOL success, NSError *error);
...
- (void)doSomethingAsync:(CompletionHandler)completion {
// ... do something
if (errorOccured) {
completion(false, [NSError errorWithDomain:@"MyErrorDomain" code:someStrangeError_Code userInfo:nil])
} else {
completion(true, nil)
}
...
}
[someObjc doSomethingAsync:^(BOOL success, NSError *error) {
if (error != nil && error.code == someStrangeError_Code) {
....
}
}];
Код Swift:
someObjc.doSomethingAsync(completion: { (success, error) in
if ((error as NSError?)?.code == someStrangeError_Code) {
// ERROR
// Binary operator '==' cannot be applied to operands of type 'Int?' and 'Int32'
}
})
Я знаю, что Swift использует протокол Error
вместо NSError
.Однако NSError
соответствует Error
и, следовательно, использование NSError
не должно быть проблемой, не так ли?
Сравнение простого кода ошибки с константой не должно быть таким сложным, но я не мог решитьthis.
Так что же является правильным "быстрым способом" проверки кода ошибки, чтобы избежать
Двоичный оператор '==' нельзя применять к операндам типа 'Int?'и 'Int32'