将 swift 闭包传递给以块作为参数的 objective-C 函数
Pass a swift closure to an objective-C function which takes a block as parameter
我在 objective-C 中有一个函数如下
- (void) fetchChannelListForWatch:(void (^)(NSDictionary *))callback
我想像这样传递一个 swift 回调闭包:
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 的类型。
如何通过参数
传递我的 swift 闭包
replyHandler: [String: AnyObject] -> ()
进入一个 objective-C 函数,该函数采用带有参数
的块
- (void) fetchChannelListForWatch:(void (^)(NSDictionary *))callback
非常感谢您的帮助!
NSDictionary 的桥接类型是
[NSObject: AnyObject]
在您的情况下,您需要将 replyHandler
更新为
replyHandler: ([NSObject : AnyObject]) -> Void)
我认为这可能是解决您问题的捷径:
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]?)
}
}
我在 objective-C 中有一个函数如下
- (void) fetchChannelListForWatch:(void (^)(NSDictionary *))callback
我想像这样传递一个 swift 回调闭包:
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 的类型。
如何通过参数
传递我的 swift 闭包replyHandler: [String: AnyObject] -> ()
进入一个 objective-C 函数,该函数采用带有参数
的块- (void) fetchChannelListForWatch:(void (^)(NSDictionary *))callback
非常感谢您的帮助!
NSDictionary 的桥接类型是
[NSObject: AnyObject]
在您的情况下,您需要将 replyHandler
更新为
replyHandler: ([NSObject : AnyObject]) -> Void)
我认为这可能是解决您问题的捷径:
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]?)
}
}