У меня есть блок объектно-кода c, который отвечает за обработку ошибок HTTP, проверяя ошибку кода NSError
. Код отправляет сообщение об ошибке обратно делегат (если это не код ошибки, что приложение игнорирует, например отмененные запросы)Обработка ошибок CFNetwork в Swift
failure:^(NSURLSessionTask *task, NSError *error, id responseObject) {
NSString *errorMessage = [self getErrorMessage:responseObject withError:error];
if (error.code!=kCFURLErrorCancelled &&
error.code!=kCFURLErrorCannotFindHost &&
error.code!=kCFURLErrorCannotConnectToHost &&
error.code!=kCFURLErrorNetworkConnectionLost &&
error.code!=kCFURLErrorDNSLookupFailed &&
error.code!=kCFURLErrorNotConnectedToInternet &&
error.code!=kCFURLErrorTimedOut) {
if ([self.delegate respondsToSelector:@selector(didFailed:)]) {
[self.delegate didFailed:errorMessage];
}
}
if (completionBlock != nil) completionBlock(NO);
}];
У меня есть несколько вопросов/проблемы, связанные с этим блоком кода.
- Достаточно просто проверить код ошибки? Рамка, которую я использую, может возвращать разные типы ошибок, и я не уверен, что эти коды ошибок уникальны.
- Как мне пойти и написать тот же код в Свифт? Я нашел определения кодов ошибок под заголовком
CFNetworkErrors
. Тем не менее,error.code
& значение из перечняCFNetworkErrors
невозможно сравнивать напрямую, так как они имеют разные типы. Можно ли отличитьerror.code
вCFNetworkErrors
, а затем сравнить коды ошибок? - Могу ли я безопасно использовать ошибки
NSURL
, такие какNSURLErrorCancelled
? Существует ли сопоставление 1 к 1 между ошибками CFNetworks и ошибками NSURL?
Имеются NSURLErrors, соответствующие всем этим ошибкам CF; нет необходимости использовать их вообще. См. NSURLError.h – gnasher729