4

我在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] -> () 

进入一个带有参数的块的目标C函数

- (void) fetchChannelListForWatch:(void (^)(NSDictionary *))callback

非常感谢您的帮助!

4

2 回答 2

2

NSDictionary 的桥接类型是

[NSObject: AnyObject]

在您的情况下,您需要更新您replyHandler

replyHandler: ([NSObject : AnyObject]) -> Void)

这是相关文档https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/WorkingWithCocoaDataTypes.html

于 2015-06-24T10:32:48.547 回答
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]?)
        }
}
于 2015-06-24T15:01:31.060 回答