向接受块作为参数的Objective-C函数传递一个快速闭包。

4
我有一个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

非常感谢您的帮助!


如果您直接在此处粘贴代码(并将其标记为代码),而不是使用图像,那么对我们来说阅读起来会更容易。 - Eiko
@Eiko,感谢您的编辑! - Jacky Wang
2个回答

2

嘿@Ben,感谢提供的信息。但在我的情况下,replyHandler是委托回调的一部分。具体来说,它是来自WatchConnectivity的didReceiveMessage函数。因此,我无法更改replyHandler的类型,将其强制转换为([NSObject:AnyObject])->Void)也不起作用。你知道如何解决这个问题吗?谢谢! - Jacky Wang

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]?)
        }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接