我对于typealias有点迷失,以下代码块工作正常,我想重构为使用typealias。
NEVPNManager.shared().loadFromPreferences(completionHandler: vpnLoadHandler)
func vpnLoadHandler(_: (Error?)) -> Void {
}
我想创建一个typealias:
typealias vpnCompleteClosure = (_: (Error?)) -> Void
func vpnLoadHandler(complete: @escaping vpnCompleteClosure) {
}
NEVPNManager.shared().loadFromPreferences(completionHandler: vpnLoadHandler)
不幸的是,这不再编译了:
无法转换类型'的值(@escaping vpnCompleteClosure) - > ()” (又名'((可选) - >()) - >()')到预期的参数类型 '(错误?) - >无效“
我错过了什么?
更新
open func loadFromPreferences(completionHandler: @escaping (Error?) -> Swift.Void)
答案 0 :(得分:0)
loadFromPreferences(completionHandler:)
期待参数completion
类型为(Error?) -> Void
您的typealias
正在传递((Optional) -> Void) -> Void
您的错误告诉您签名不匹配
话虽如此,你需要弄清楚顶级方法的签名是什么。你叫什么完成握手?你有什么期望从中得到回报。
我不得不承认我对将vpnLoadHandler(complete:)
传递给loadFromPreferences(completionHandler:)
您的方法最终会看起来像(((Error?)-> Void) -> Void) -> Void
将您的typealias
写为:
typealias VPNCompletionHandler = (Error?) -> Void
func vpnLoadHandler(completion: @escaping VPNCompletionHandler)