Синтаксический анализ GraphQL () приводит к Swift - PullRequest
0 голосов
/ 12 апреля 2020

Я относительно новичок в Swift, и у меня возникают проблемы с анализом результата вызова API GraphQL.

Я вижу, что результат в объявлении 'fail ()' имеет тип NSError, и я в основном пытаясь получить к нему доступ, если это «ошибка», а затем получить доступ к ключам NSError. Результат:

failure(Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSUnderlyingError=0x282232700 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x280e54b40 [0x1faa4fcf0]>{length = 16, capacity = 16, bytes = 0x1002005036d7fb9f0000000000000000}, _kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=http://staging.mysite.com/api/, NSErrorFailingURLKey=http://staging.mysite.com/api/v2/, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-4, NSLocalizedDescription=The network connection was lost.})

Я получаю следующую информацию, используя:

print("\(result)")

Результатом является объект типа Result<GraphQLResult<Data>, Error>. Существуют методы для получения ошибок, но этот результат, по-видимому, не выдается как ошибка GraphQL. Уловка ошибки, которую я использую:

if let firstError = try? result.get().errors?.first {
    completion([], [], firstError)
    return
}

Она проходит эту проверку, поэтому просто интерпретирует ее как нормальный результат данных. У меня вопрос: как мне разобрать эту информацию?

Я думаю, что мне нужно проверить, не является ли это ошибкой, затем развернуть ее из типа «ошибка», а затем обработать вложенную информацию как объект NSError. , Я не могу использовать «содержит», так как это не строка. Для result существует метод get(), который позволяет вам result.get().data или result.get().error, но в этом случае ничего не возвращает.

Любая помощь в том, как я могу разобрать эту информацию, будет принята с благодарностью. Спасибо!

1 Ответ

1 голос
/ 12 апреля 2020

Результатом является обобщенное перечисление c swift, которое имеет два состояния: успех или сбой.

Чтобы получить ошибку от сбоя, необходимо использовать оператор switch, например:

switch result {
   case .failure(let error):
     //Handle error here
    default:
       break
 }

Подробнее о перечислении результатов здесь: https://developer.apple.com/documentation/swift/result.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...