【问题标题】:Passing a Dictionary object from Obj-C to Swift将字典对象从 Obj-C 传递给 Swift
【发布时间】:2016-09-20 15:59:25
【问题描述】:

在我的 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 对象的问题吗?

【问题讨论】:

  • 还不是 Swift 专家,但它不是字典。它可以包含不同的对象类型。您是否尝试过在 setInfo 中仅接受 NSDictionary?

标签: ios objective-c swift dictionary nsdictionary


【解决方案1】:

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

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

}

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

【讨论】:

  • 谢谢,理查德。实际上,我必须使用 Dictionary 才能使该方法正常运行。如果你更新你的答案,我会接受作为解决方案。
  • @Vee 刚刚更新。奇怪的是,它不适用于 AnyObject。为了实验,您可以尝试以Dictionary&lt;NSObject,AnyObject&gt; 进行操作吗?
  • 你是对的...Dictionary&lt;NSObject,AnyObject&gt; 工作。谢谢!
猜你喜欢
  • 2015-05-21
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 2019-12-21
  • 2015-12-26
  • 1970-01-01
  • 2016-07-15
  • 1970-01-01
相关资源
最近更新 更多