我在Objective-C中有一个函数,如下所示
- (void) fetchChannelListForWatch:(void (^)(NSDictionary *))callback
我想像这样将快速回调闭包传递给它:
fetchChannelListForWatch(replyHandler)
其中replyHandler是类型为
的闭包replyHandler: ([String : AnyObject]) -> Void)
我收到错误:
Cannot invoke 'fetchChannelListForWatch' with an argument list of type '(([String : AnyObject]) -> Void)'
replyHandler来自WatchConnectivity委托
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void)
因此我无法更改replyHandler的类型。
如何通过参数
传递我的快速闭包replyHandler: [String: AnyObject] -> ()
进入一个带有参数
的块的Objective-C函数- (void) fetchChannelListForWatch:(void (^)(NSDictionary *))callback
非常感谢您的帮助!
答案 0 :(得分:2)
NSDictionary的桥接类型是
[NSObject: AnyObject]
在您的情况下,您需要将replyHandler
更新为
replyHandler: ([NSObject : AnyObject]) -> Void)
答案 1 :(得分:2)
我认为这可能是解决问题的捷径:
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void){
let objCObject = ObjectiveCClass()
objCObject.fetchChannelListForWatch { (dict) -> Void in
replyHandler(dict as! [String : AnyObject]?)
}
}