繁体   English   中英

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

[英]Return a generic closure type based on the input parameters

我有名为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) {
  ...
}

其中将使用基于将作为enumapi参数声明为typealias的块来键入GenericSuccessBlock

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM