我按照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)
}
错误:表达式解析为一个未使用的功能
通用功能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)
})
无论如何,我不能肯定,如果这真的有可能的改进,你最好找到一个更好的教程。
这看起来好对我来说,你总是可以尝试
completion(onResult: { (j) in print(j)},
onError: { (e) in print(e) })
你的函数返回一个闭包。你有没有做过用来关闭。做这个:
completion(onResult: { (j) in
print(j)
}) { (e) in
print(e)
}()
注意在末尾括号。或者更明确:
let completionClosure = completion(onResult: { (j) in
print(j)
}) { (e) in
print(e)
}
completionClosure()