Swift 3.0:推送通知中对成员“下标”问题的模糊引用

Posted

技术标签:

【中文标题】Swift 3.0:推送通知中对成员“下标”问题的模糊引用【英文标题】:Swift 3.0 : Ambiguous reference to member 'Subscript' issue in push notification 【发布时间】:2017-01-20 10:24:38 【问题描述】:

这是以下代码,但我在 swift3 中收到以下错误

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) 
    notificationReceived(notification: userInfo as [NSObject : AnyObject])


func notificationReceived(notification: [NSObject:AnyObject]) 
        let viewController = window?.rootViewController
        let view = viewController as? ViewController
        view?.addNotification(
            title: getAlert(notification: notification).0,
            body: getAlert(notification: notification).1)
    

    private func getAlert(notification: [NSObject:AnyObject]) -> (String, String) 
        let aps = notification["aps"] as? NSDictionary
        let alert = aps?["alert"] as? [String:AnyObject]
        let title = alert?["title"] as? String
        let body = alert?["body"] as? String
        return (title ?? "-", body ?? "-")
    

但我在“let aps = notification["aps"] as?NSDictionary 处收到以下错误“Swift 3.0 : Ambiguous reference to member 'Subscript' issue” >"

【问题讨论】:

【参考方案1】:

类型转换

将 userInfo 从 NSDictionary 更改为 [String : Any]。并尝试一次

let aps = notification["aps"] as? [String : Any]

或者像这样写

let aps = notification["aps" as NSString] as? [String:Any]

【讨论】:

【参考方案2】:

字符串不能转换为 NSObject,只需使用 Swift 3 将所有 [NSObject:AnyObject] 重命名为 [String:Any]

【讨论】:

以上是关于Swift 3.0:推送通知中对成员“下标”问题的模糊引用的主要内容,如果未能解决你的问题,请参考以下文章

类型 Any 没有下标成员 Swift 3.0

类型 Any 没有下标成员 Swift 3.0 中的错误?

如何在前台 iOS Swift 3.0 中接收推送通知?

通过 Firebase 函数发送的 Swift 中的加密推送通知

Xcode 8 中对成员“下标”的模糊引用

想知道如何以编程方式在 swift 3.0 中对 UITableViewCell 进行子类化?