将一个Dictionary对象从Obj-C传递给Swift

时间:2016-05-23 16:59:58

标签: ios objective-c swift dictionary nsdictionary

在我的obj-C代码库中,我正在调用将NSDictionary对象传递给Swift类:

AppDelegate.m

-(void)application:(UIApplication *) application didReceiveRemoteNotification: (NSDictionary *)dictionaryInfo {
    ...
    [[SwiftClass sharedInfo] setInfo:dictionaryInfo];
    ...
}

SwiftClass.swift

class SwiftClass: NSObject {

    static let sharedInfo = MYQNotificationInfo()

    func setInfo(notification:Dictionary<String,String>) -> Void {
         // runtime error happens before this line
    }

}

应用程序编译但是当我收到推送通知时,它会崩溃。使用Xcode调试器,我在AppDelegate中的setInfo方法中设置断点,并且可以看到接收到推送通知。但是,一旦我进入setInfo方法,那么应用程序崩溃,从未真正进入函数。因此,我怀疑我没有正确设置setInfo中的参数。

这是一个我没有正确传递Dictionary对象的问题吗?

1 个答案:

答案 0 :(得分:3)

NSDictionary只能作为[NSObject:AnyObject]传递给swift,因为NSDictionary可以包含任何类型的对象。试试这个:

func setInfo(notification:Dictionary<NSObject,AnyObject>) -> Void {

}

收到字典后,您可以检索密钥的值,并在需要时将该值向下转换为声明的类型