swift 4 发布通知 userInfo 混合类型(字符串和 NSMutableArray)

Posted

技术标签:

【中文标题】swift 4 发布通知 userInfo 混合类型(字符串和 NSMutableArray)【英文标题】:swift 4 post notification userInfo with mixed types (string and NSMutableArray) 【发布时间】:2017-09-05 21:33:39 【问题描述】:

我今天刚开始学习 swift。我试图发布一个同时包含 [String, String] 数据和 [String, NSMutableArray] 数据的通知。我收到一条错误消息:

Cannot convert value of type 'NSMutableDictionary' to expected argument type [AnyHashable : Any]?

我试图找到一个解决方案或类似的代码,但还没有能够理解这个问题。有人能告诉我真正的问题是什么吗?我怀疑这与混合我的字典值类型有关。如果是这样,这是如何快速完成的?

        var dict = NSMutableDictionary()
        dict["status"] = "ok"
        var list = NSMutableArray()
        list.add("this")
        list.add("is")
        list.add("a test")
        dict["list"] = list

        NotificationCenter.default.post(name: Notification.Name("testing"), object: nil, userInfo: dict) <--- error

错误指向发布通知行中的“dict”变量

谢谢

【问题讨论】:

【参考方案1】:

您不能将NSMutableDictionary 用作userInfo 类型。你也不应该使用它(在 Swift 中使用 NSMutableDictionaryNSMutableArray 的理由很少)。请改用var dict: [String: Any] = [:](或let dict = […])。同样,list 的类型应为[String] 而不是NSMutableArray

let dict = ["status": "ok",
            "list": ["this", "is", "a test"]]
NotificationCenter.default.post(name: Notification.Name("testing"), object: nil, userInfo: dict)

【讨论】:

以上是关于swift 4 发布通知 userInfo 混合类型(字符串和 NSMutableArray)的主要内容,如果未能解决你的问题,请参考以下文章

SWIFT - 从 userInfo 获取值以填充推送通知的字段

NotificationCenter 中的推送通知在 userinfo 中返回 nil - Swift3

如何将目标 C 推送通知代码转换为 Swift

如何使用通知和访问 userInfo?

Swift didReceiveRemoteNotification userInfo 无法获得价值

在混合语言项目中提取通知用户信息