如何创建一个与@escaping 一起使用的闭包
How to create a closure to use with @escaping
我在委托上有这个函数签名
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 sessionDidReceiveMessageReplyHandlerHandler = (WCSession, [String : Any], @escaping ([String : Any])) -> Void
如果我创建了一个没有转义的类型别名,它不会让我在函数内部使用错误消息
Cannot convert value of type '([String : Any]) -> Void' to expected
argument type '[String : Any]'
您在闭包上缺少一个 return 类型(即在最后一个 )
中):
typealias sessionDidReceiveMessageReplyHandlerHandler = (WCSession, [String : Any], @escaping ([String : Any]) -> Void) -> Void
我在委托上有这个函数签名
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 sessionDidReceiveMessageReplyHandlerHandler = (WCSession, [String : Any], @escaping ([String : Any])) -> Void
如果我创建了一个没有转义的类型别名,它不会让我在函数内部使用错误消息
Cannot convert value of type '([String : Any]) -> Void' to expected argument type '[String : Any]'
您在闭包上缺少一个 return 类型(即在最后一个 )
中):
typealias sessionDidReceiveMessageReplyHandlerHandler = (WCSession, [String : Any], @escaping ([String : Any]) -> Void) -> Void