Общий параметр функции Swift
Итак, я использую библиотеку alamofire и object mapper из github.
В моей функции есть этот код
Alamofire.request(urlRequest).responseObject { (response: DataResponse<News>) in }
Я делаю проверку ответа вместе с кодом состояния также
switch response.result {
case .success:
if let object = responseObject {
completion(object)
}
break;
case .failure(let error):
print(error)
if let statusCode = response.response?.statusCode {
var message = String()
switch statusCode {
//status code checking here
}
}
else {
var message = String()
message = error.localizedDescription
}
break;
}
Так что у меня есть несколько вызовов API, и все вызовы API также будут реализовывать эту проверку кода состояния. Я не хочу копировать этот фрагмент кода для всех моих функций вызова API
Итак, я планирую создать специальную функцию для проверки кода состояния из вызова API.
Но я сталкиваюсь с одной проблемой. Как я могу создать универсальный параметр функции, который принимает все типы DataResponse<>?
Я пытался запустить этот код, но не смог
// validateResponse function
static func validateResponse(dataResponse: DataResponse<Any>) -> String {
// status code checking here
}
// inside the alamofire.request response
validateResponse(dataResponse: response)
// return me this error
Cannot convert value of type 'DataResponse<News>' to expected argument type 'DataResponse<Any>'
DataResponse<> всегда будет меняться в зависимости от модели, представленной в alamofire.responseObject.
Кто-нибудь может подсказать мне, как это сделать правильно? Спасибо!
1 ответ
Вам нужно использовать дженерики!
static func validateResponse<T>(dataResponse: DataResponse<T>) -> String {
// status code checking here
}
Использование:
validateResponse(dataResponse: response)
Общий параметр T
будет выведено News
это будет как если бы метод был таким:
static func validateResponse(dataResponse: DataResponse<News>) -> String {
// status code checking here
}