根据输入参数返回通用闭包类型

时间:2017-10-03 13:59:59

标签: ios swift api generics struct

我的结构名为APIManager。这个结构可以调用一些API并返回它们的值。这是如何组织的:

struct APIManager {

  public static func checkEmail(_ email: String, success: @escaping (_ status: String) -> Void, failure: @escaping FailureBlock) {

     Alamofire
            .request(Router.LoginProcess.checkEmail(email: email))
            .validate()
            .responseJSON { (response: DataResponse<Any> ) in

                switch response.result {
                case .success(_):
                    if let value = response.result.value {
                        let json = JSON(value)
                        let userStatus = User.Status(rawValue: json["status"].intValue)

                        success(userStatus ?? User.Status.unknown)
                    }
                    break

                case .failure(let error):
                    failure()
                    break
                }
        }

  }



  public static func block(
      reason: User.BlockReason,
      success: @escaping () -> Void,
      failure: @escaping FailureBlock) {

      Alamofire
          .request(Router.LoginProcess.block(reason: reason))
          .validate()
          .responseJSON { (response: DataResponse<Any> ) in

              switch response.result {
              case .success(_):
                  success()
                  break

              case .failure(_):
                  failure()
                  break
              }
      }
  }

}

正如您所看到的,可以重用大部分代码来创建名为call(_ api: API.Type)的方法,但问题出在success块中,因为每个方法都有所不同。我怎样才能达到如下结果?

public static func call(_ api: API.Type, success: GenericSuccessBlock, failure: FailureBlock) {
  ...
}

根据GenericSuccessBlock typealias参数,使用声明为api的块来输入enum的位置。

0 个答案:

没有答案
相关问题