对具有字符串文字和 NSObject 下标类型的下标的引用不明确
Ambiguous reference to subscript with string literal and NSObject subscript type
我正在将我的项目升级到 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 3 不再自动桥接值类型(String
,即 "aps" 的类型)到 Objective-C 引用类型(NSString
,字典所需类型 NSObject
键的后代)
所以你必须这样做:
userInfo["aps" as NSString]
您还可以为自己省去一些不必重复此桥接技术的麻烦:尽快将其余部分转换为原生 Swift 格式:
if let aps = userInfo["aps" as NSString] as? [String: AnyObject] {
if let alert = aps["alert"] as? [String: String], message = alert["message"] {
// message is now a Swift String
}
else if let alert = aps["alert"] as? String {
// alert is now a Swift String
}
}
与往常一样,使用 Swift 集合类型,Foundation 集合类型不提供有关其内容的任何类型信息。
首先使用委托方法的实际签名,将方法标记为私有并保留旧签名是一个糟糕的妥协。但是考虑到该方法已被弃用。
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
}
}
}
我正在将我的项目升级到 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 3 不再自动桥接值类型(String
,即 "aps" 的类型)到 Objective-C 引用类型(NSString
,字典所需类型 NSObject
键的后代)
所以你必须这样做:
userInfo["aps" as NSString]
您还可以为自己省去一些不必重复此桥接技术的麻烦:尽快将其余部分转换为原生 Swift 格式:
if let aps = userInfo["aps" as NSString] as? [String: AnyObject] {
if let alert = aps["alert"] as? [String: String], message = alert["message"] {
// message is now a Swift String
}
else if let alert = aps["alert"] as? String {
// alert is now a Swift String
}
}
与往常一样,使用 Swift 集合类型,Foundation 集合类型不提供有关其内容的任何类型信息。
首先使用委托方法的实际签名,将方法标记为私有并保留旧签名是一个糟糕的妥协。但是考虑到该方法已被弃用。
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
}
}
}