Я работаю с плохо спроектированным API (я не контролирую его), где, даже если токен доступа истек, он все равно возвращает код успеха HTTP, но включает 401 Unauthorized в фактическом теле ответа. Поэтому простой проверки кода состояния HTTP недостаточно, и мне нужно проверить фактический ответ.
Я делаю много сетевых запросов в своем приложении к этому API, и когда я получаю ответ, мне нужно сначала проверить, является ли ответ массивом или словарем. Если массив, то у нас все хорошо. Если это словарь, то мне нужно проверить поле «ошибка» в словаре ответов, в котором будет 401 Несанкционированный.
Таким образом, каждый раз, когда я получаю ответ JSON, у меня есть следующий фрагмент кода для возврата из функции, если это словарь ошибок:
guard !(myJSON is NSDictionary) && (myJSON as! NSDictionary).value(forKey: "error") != nil else {
print("Error: ", MyAppError.accessTokenExpired)
return
}
Мне интересно, есть ли способ предотвратить дублирование этого куска кода в каждой функции сетевого запроса, которую я имею? Могу ли я где-нибудь получить это и просто вызвать его, не дублируя эти строки кода каждый раз?