Общий параметр функции 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 
}
Другие вопросы по тегам