gpt4 book ai didi

swift - 如何将闭包提取到类型别名中?

转载 作者:行者123 更新时间:2023-11-28 07:52:03 25 4
gpt4 key购买 nike

我对 typealias 有点迷茫,下面的代码块工作正常,我想重构为使用 typealias。

NEVPNManager.shared().loadFromPreferences(completionHandler: vpnLoadHandler)

func vpnLoadHandler(_: (Error?)) -> Void {

}

我想创建一个类型别名:

typealias vpnCompleteClosure = (_: (Error?)) -> Void

func vpnLoadHandler(complete: @escaping vpnCompleteClosure) {
}

NEVPNManager.shared().loadFromPreferences(completionHandler: vpnLoadHandler)

不幸的是,这不再编译:

Cannot convert value of type '(@escaping vpnCompleteClosure) -> ()' (aka '((Optional) -> ()) -> ()') to expected argument type '(Error?) -> Void'

我错过了什么?

更新:

open func loadFromPreferences(completionHandler: @escaping (Error?) -> Swift.Void)

最佳答案

loadFromPreferences(completionHandler:) 需要一个类型为 (Error?) -> Void 的参数 completion 你的 typealias 正在传递一个 ((Optional) -> Void) -> Void 你的错误告诉你你有不匹配的签名。

也就是说,您需要弄清楚顶级方法的签名是什么。你叫你的 completionHandler 什么?你期望从中得到什么。

我不得不承认我对你将 vpnLoadHandler(complete:) 传递给 loadFromPreferences(completionHandler:) 的目的感到困惑

你的方法最终看起来像 (((Error?)-> Void) -> Void) -> Void

将你的 typealias 写成:

 typealias VPNCompletionHandler = (Error?) -> Void

func vpnLoadHandler(completion: @escaping VPNCompletionHandler)

关于swift - 如何将闭包提取到类型别名中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49378815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com