有两个功能,如下所示。大部分功能都是相同的。它的想法是从getResponse()[Helper Callback]获取webservice的输出,解析并通过getResult()将信息传递给包装器回调。处理闭包 - 使代码更通用
static func getAllDealers(dealerSearchServiceDomain: ARSDealerSearchServiceDomain, wrapperCallback:(getResult:() throws -> Void) -> Void) throws
{
try ARSInputValidator.validateZipCode(dealerSearchServiceDomain.zip)
try ARSDealerConnection.getAllDealers(dealerSearchServiceDomain, helperCallback: { (getResponse) -> Void in
do
{
let result = try getResponse()
try ARSDealerParser.parseDealerSearchResponse(dealerSearchServiceDomain)
wrapperCallback(getResult: { return })
}
catch
{
wrapperCallback(getResult: { throw error })
}
})
}
static func getDealerDetails(dealerDetailsServiceDomain: ARSDealerDetailsServiceDomain, wrapperCallback:(getResult:() throws -> Void) -> Void) throws
{
try ARSDealerConnection.getDealerDetails(dealerDetailsServiceDomain, helperCallback: { (getResponse) -> Void in
do
{
let result = try getResponse()
try ARSDealerParser.parseDealerDetailsResponse(dealerDetailsServiceDomain)
wrapperCallback(getResult: { return })
}
catch
{
wrapperCallback(getResult: { throw error })
}
})
}
我想添加一个单独的功能,为共同的功能,例如,
static func parser(serviceCallDomain: ARSServiceCallDomain ,wrapperCallback:(getResult:() throws -> String) -> Void, helperCallback:(getResponse:() throws -> String) -> Void) throws
{
helperCallback { (getResponse) -> Void in
但是有一个编译错误&我不能够把它完成。有15个以上的Web服务调用,所以显示的一个常见问题将会非常有帮助。
下一步,我还需要将parseDealerSearchResponse()& parseDealerDetailsResponse()函数传递给常用函数。
我是新来的关闭。请帮助。
//编辑 - 加样
我对Git中的问题的样本 - 请参阅类Layer1.swift https://github.com/vivinjeganathan/ErrorHandling/tree/Closures-Refactor
请注意,您的“通用功能”示例不完整,请向我们展示您构建此功能的完整尝试。有点偏离主题:注意'Void'只是'()'的一个typealias(空元组_type_('()'也是非可选'()'type)的单个值),因此'( getResult:()throws - > Void) - > Void)'等同于'(getResult:()throws - >()) - >())'。即使对此没有明显的约定,后者与在同一表达式中不混合该类型的类型和类型相关是一致的。 – dfri
......最后,返回'()'的函数/闭包不需要明确地说明这一点,例如,您的'parser'签名中的'wrapperCallback'参数可以采用稍微更紧凑的形式'wrapperCallback:(getResult :()throws - > String)'。 – dfri
@dfri我编辑了这个问题。在Github中添加了一个示例项目... – vivin