【问题标题】: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)
    }

错误:表达式解析为未使用的函数

【问题讨论】:

    标签: swift compiler-errors completionhandler


    【解决方案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()
        

        【讨论】:

          猜你喜欢
          • 2015-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-27
          • 1970-01-01
          • 1970-01-01
          • 2019-04-20
          相关资源
          最近更新 更多