如何创建用于@sescape的闭包



我在代理上有这个函数签名

func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:])

我需要在Singleton上创建一个闭包来转发委托方法,然后我这样做:

typealias sessionDidReceiveUserInfoHandler = (WCSession, [String : Any]) -> Void
var sessionDidReceiveUserInfo: sessionDidReceiveUserInfoHandler?

我这样使用它:

let mySingleton = MySingleton.sharedInstance
mySingleton.sessionDidReceiveUserInfo = {(session, userInfo) in }

现在我有了这个带有@escaping子句的函数签名

func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {

这个签名我该怎么做。Xcode不允许我像这样将转义添加到typealias中:

typealias sessionDidReceiveMessageReplyHandlerHandler = (WCSession, [String : Any], @escaping ([String : Any])) -> Void

如果我创建了一个没有转义的typealias,它将不允许我在函数内部使用错误消息

无法转换类型为'([String:Any](的值->应为"Void"参数类型"[String:Any]">

您在闭包上缺少一个返回类型(即在最后一个)内(:

typealias sessionDidReceiveMessageReplyHandlerHandler = (WCSession, [String : Any], @escaping ([String : Any]) -> Void) -> Void

相关内容

  • 没有找到相关文章

最新更新