Ios 用Objective-NSC字典协调Swift回调
我们的应用程序使用推送插件: 推送插件所做的一件事就是swizzle AppDelegate.m文件。因为我们的AppDelegate文件是.swift文件,所以我需要导入核心功能 但是,我在转换Swift函数以进入它期望的NSDictionary对象内部时遇到了一个问题 以下是我正在转换的代码:Ios 用Objective-NSC字典协调Swift回调,ios,objective-c,swift,cordova,dictionary,Ios,Objective C,Swift,Cordova,Dictionary,我们的应用程序使用推送插件: 推送插件所做的一件事就是swizzle AppDelegate.m文件。因为我们的AppDelegate文件是.swift文件,所以我需要导入核心功能 但是,我在转换Swift函数以进入它期望的NSDictionary对象内部时遇到了一个问题 以下是我正在转换的代码: void (^safeHandler)(UIBackgroundFetchResult) = ^(UIBackgroundFetchResult result){
void (^safeHandler)(UIBackgroundFetchResult) = ^(UIBackgroundFetchResult result){
dispatch_async(dispatch_get_main_queue(), ^{
completionHandler(result);
});
};
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithCapacity:2];
[params setObject:safeHandler forKey:@"handler"];
PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"];
pushHandler.handlerObj = params;
因此,我做的第一件事就是将(^safeHandler)
转换为Swift:
let safeHandler: (UIBackgroundFetchResult) -> () =
{
result in dispatch_async(dispatch_get_main_queue())
{
completionHandler(result)
}
}
接下来,我需要创建NSMutableDictionary
对象,该对象在pushHandler
上设置为handlerObj
将safeHandler
直接放入字典会抛出错误
(UIBackgroundFetchResult)->()不确认任何对象
协议
因此,我尝试通过执行以下操作将字典类型更改为[NSObject:closure]()
:
typealias closure = (UIBackgroundFetchResult) -> Void
var params:Dictionary<String, closure> = Dictionary<String, closure>()
params["handler"] = safeHandler
我又犯了错误
无法分配类型为“Dictionary”(aka)的值
“Dictionary()>”)以键入
“[NSObject:AnyObject]!”
回到原点。似乎在Objective-C中,传入函数是可以的,但在Swift中不是这样吗
您知道我如何解决这个问题并将函数放入Objective-C代码所期望的[NSObject:AnyObject]
中吗
pushHandler.handlerObj = params