具有多个闭包参数的函数给出错误“表达式解析为未使用的函数”
Posted
技术标签:
【中文标题】具有多个闭包参数的函数给出错误“表达式解析为未使用的函数”【英文标题】:Function with multiple closure arguments gives error "Expression resolved to an unused function" 【发布时间】:2019-02-10 22:22:58 【问题描述】:我已经关注a tutorial on Swift completion handlers 写了这个函数。每当我尝试使用闭包时,都会收到错误消息“表达式解析为未使用的函数”
func completion<Result>(onResult: @escaping (Result) -> Void,
onError: @escaping (Error) -> Void) -> ((Result?, Error?) -> Void)
return (maybeResult, maybeError) in
if let result = maybeResult
onResult(result)
else if let error = maybeError
onError(error)
else
onError(SplitError.NoResultFound)
如何称呼
completion(onResult: (j) in
print(j)
) (e) in
print(e)
错误:表达式解析为未使用的函数
【问题讨论】:
【参考方案1】:通用函数 completion
返回一个闭包,该闭包旨在用作某些异步函数的完成处理程序。
例如,假设你有一些这样的异步方法:
func someAsyncFunc(completion: @escaping (Data?, Error?)->Void)
//...
因此,要使用闭包,您可能需要将返回的闭包存储到某个闭包变量中,以便以后使用:
let myCompletionHandler = completion(onResult: (j: Data) in
print(j)
) (e) in
print(e)
someAsyncFunc(completion: myCompletionHandler)
或者,你可以直接写成参数:
someAsyncFunc(completion: completion(onResult: (j) in
print(j)
) (e) in
print(e)
)
无论如何,我不能确定这是否真的是一个改进,你最好找到一个更好的教程。
【讨论】:
【参考方案2】:我觉得还可以,你可以试试
completion(onResult: (j) in print(j),
onError: (e) in print(e) )
【讨论】:
【参考方案3】:你的函数返回一个闭包。你没有做的是使用闭包。 这样做:
completion(onResult: (j) in
print(j)
) (e) in
print(e)
()
注意最后的括号。或者更清楚地说:
let completionClosure = completion(onResult: (j) in
print(j)
) (e) in
print(e)
completionClosure()
【讨论】:
以上是关于具有多个闭包参数的函数给出错误“表达式解析为未使用的函数”的主要内容,如果未能解决你的问题,请参考以下文章