【发布时间】:2016-01-06 16:35:22
【问题描述】:
有两个功能,如下图所示。两者的大部分功能都是相同的。它的想法是从getResponse() [Helper Callback] 中获取webservice的输出,解析并通过getResult()将信息传递给wrapper回调。
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 个以上的网络服务调用,所以我正在尝试显示的常见问题将非常有帮助。
下一步,我还需要将函数 parseDealerSearchResponse() 和 parseDealerDetailsResponse() 传递给通用函数。
我是闭包的新手。请帮忙。
//编辑——添加样本
我有一个解决 Git 问题的示例 - 请参阅类 Layer1.swift https://github.com/vivinjeganathan/ErrorHandling/tree/Closures-Refactor
【问题讨论】:
-
请注意,您的“通用功能”示例不完整,请向我们展示您构建此功能的完整尝试。有点离题:还要注意
Void只是()的类型别名(空元组type(()也是非可选()类型的单个值)),因此(getResult: () throws -> Void) -> Void)等价于(getResult: () throws -> ()) -> ())。即使对此没有明显的约定,后者对于不在同一表达式中混合类型和该类型的类型别名是一致的。 -
... 最后,返回
()的函数/闭包不需要明确说明这一点,例如parser签名中的wrapperCallback参数可以采用更紧凑的形式wrapperCallback:(getResult:() throws -> String)。 -
@dfri 我已经编辑了这个问题。在 Github 中添加了一个示例项目...