Обобщения Swift: "Общий параметр T не может быть выведен"

Я пытаюсь сделать общий класс обработчика запросов на основе Moya и Object Mapper. По сути, я хочу метод, который выполняет запрос к Moya Target и выполняет некоторую базовую обработку как в случае успеха, так и в случае неудачи:

мой класс будет примерно таким, основанным на этом ответе:

class APIRequestHandler<T: Mappable> {
  let provider = APIManager().getAPIProvider() // Moya provider

  func performRequest(target: Target, completionHandler: (response: T?, error: StoreError?) -> Void) {
    provider.request(target) { result in
      switch result {
      case let .Success(response):
        switch response.statusCode {
        case 200..<300:
          do {
            let json = try NSJSONSerialization.JSONObjectWithData(response.data, options: .MutableContainers)
            let contractualDocument = Mapper<T>().map(json)
            completionHandler(response: contractualDocument!, error: nil)
          } catch _ {
            // Unexpected error when the response can't be parsed
            completionHandler(response: nil, error: StoreError.UnexpectedError)
          }
        case 500:
          completionHandler(response: nil, error: StoreError.ServerError)
        default:
          completionHandler(response: nil, error: StoreError.HTTPError(statusCode: response.statusCode))
        }
      case .Failure(_):
        completionHandler(response: nil, error: StoreError.NetworkError)
      }
    }
  } 
}

Мой вопрос заключается в том, могу ли я получить те же результаты, используя дженерики на уровне функций, а не на уровне классов:

  func performRequest<T: Mappable>(target: Target, completionHandler: (response: T?, error: StoreError?) -> Void) {
    provider.request(target) { result in
      switch result {
      case let .Success(response):
          // blah, blah
      case .Failure(_):
          // bleh, bleh
      }
    }
  } 

Я попробовал это, и я получаю ошибку сборки в моем коде:

Generic parameter "T" could not be inferred

0 ответов

Другие вопросы по тегам