ios - 对具有字符串文字和 NSObject 下标类型的下标的引用不明确

标签 ios swift dictionary swift3 nsobject

我正在将我的项目升级到 swift 3.0,但在 userInfo["aps"] 上出现错误。我试过在它之间加上问号和解释点,但没有成功

private func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {

        if let aps = userInfo["aps"] as? NSDictionary {
            if let alert = aps["alert"] as? NSDictionary {
                if let message = alert["message"] as? NSString {
                    //Do stuff
                }
            } else if let alert = aps["alert"] as? NSString {
                //Do stuff
            }
        }


    }

最佳答案

与往常一样,使用 Swift 集合类型,Foundation 集合类型不提供有关其内容的任何类型信息。

首先使用委托(delegate)方法的实际签名,将方法标记为私有(private)并保留旧签名是一个糟糕的妥协。但是请考虑该方法已被弃用。

func application(_ application: UIApplication, didReceiveRemoteNotification 
                      userInfo: [AnyHashable : Any])

JSON 集合类型总是[String:Any](字典)或[[String:Any]](数组)

func application(_ application: UIApplication, didReceiveRemoteNotification 
                      userInfo: [AnyHashable : Any])

    if let aps = userInfo["aps"] as? [String:Any] {
        if let alert = aps["alert"] as? [String:Any] {
            if let message = alert["message"] as? String {
                //Do stuff
            }
        } else if let alert = aps["alert"] as? String {
            //Do stuff
        }
    }
}

关于ios - 对具有字符串文字和 NSObject 下标类型的下标的引用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39730781/

相关文章:

arrays - 在 Python 中使用字典填充数组是否会创建重复的字典?

ios - 为每个线程创建EAGLContext可以吗?

ios - Google Maps iOS SDK - 在 GMSMapView 上添加 UIView/UIButton

ios - 通过检查状态自动更新 Swift 中的标签

ios - CFBundleVersion 必须是句号分隔的列表

swift - 在 ScrollView 中显示表格单元格并快速滚动到下一个或上一个

python - 在字典中获取列表值的长度

python - 使用 .join() 操作嵌套字典的内部字典元素

ios - 应用程序内购买 - 在等待 AppStore 警报 View 时显示什么?

ios - 如何禁用 AVPlayerViewController 中的音频和字幕设置