1

Moya と Object Mapper に基づいて、一般的なリクエスト ハンドラー クラスを作成しようとしています。基本的に、Moya ターゲットへのリクエストを実行し、成功と失敗の両方のケースでいくつかの基本的な処理を実行するメソッドが必要です。

私のクラスは、この答えに基づいて次のようになります:

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

4

0 に答える 0