[英]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) {
...
}
其中将使用基于将作为enum
的api
参数声明为typealias
的块来键入GenericSuccessBlock
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.