我已按照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)
}
错误:表达式解析为未使用的函数
答案 0 :(得分: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)
})
无论如何,我不确定这是否真的可以改善,您应该最好找到更好的教程。
答案 1 :(得分:0)
我觉得还可以,您可以随时尝试
completion(onResult: { (j) in print(j)},
onError: { (e) in print(e) })
答案 2 :(得分:0)
您的函数返回一个闭包。您尚未使用的是闭包。 这样做:
completion(onResult: { (j) in
print(j)
}) { (e) in
print(e)
}()
请注意最后加上括号。或者更清楚一点:
let completionClosure = completion(onResult: { (j) in
print(j)
}) { (e) in
print(e)
}
completionClosure()