多封参数函数给出错误“解析为一个未使用的函数式”

问题描述 投票:0回答:3

我按照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)
    }

错误:表达式解析为一个未使用的功能

swift compiler-errors completionhandler
3个回答
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)
    })

无论如何,我不能肯定,如果这真的有可能的改进,你最好找到一个更好的教程。


0
投票

这看起来好对我来说,你总是可以尝试

completion(onResult: { (j) in print(j)}, 
           onError: { (e) in print(e) })

0
投票

你的函数返回一个闭包。你有没有做过用来关闭。做这个:

completion(onResult: { (j) in
    print(j)
}) { (e) in
    print(e)
}()

注意在末尾括号。或者更明确:

let completionClosure = completion(onResult: { (j) in
    print(j)
}) { (e) in
    print(e)
}
completionClosure()
© www.soinside.com 2019 - 2024. All rights reserved.