上下文类型 'Any' 不能与数组文字 Swift 3 一起使用
Posted
技术标签:
【中文标题】上下文类型 \'Any\' 不能与数组文字 Swift 3 一起使用【英文标题】:Contextual type 'Any' cannot be used with array literal Swift 3上下文类型 'Any' 不能与数组文字 Swift 3 一起使用 【发布时间】:2017-03-01 11:12:12 【问题描述】:我正在尝试将我的代码 Swift 2 转换为 Swift 3,但我无法转换以下代码。
当我使用 Any 而不是 AnyObject 时,我收到如下错误:上下文类型 'Any' 不能与“items:”部分中的数组文字一起使用。
当我使用 AnyObject,然后将“名称:”部分用作 AnyObject 时,出现如下错误:上下文类型 'AnyObject' 不能与数组文字一起使用
我找不到最好的解决方案。 我该怎么做?
var menus: [[String: AnyObject]]
return [
["name": NSLocalizedString("General", comment: ""),
"items": [
MenuItem(icon: UIImage.fontAwesomeIcon(FontAwesome.Heart, textColor: TubeTrends.Settings.foregroundColor, size: TubeTrends.Settings.menuIconSize), title: NSLocalizedString("Favorites", comment: ""), action: (indexPath) -> Void in
self.navigationController?.pushViewController(self.favoritesVideoListVC(), animated: true)
),
]
]
【问题讨论】:
【参考方案1】:在 Swift 3 中,异构文字集合类型必须显式注释,例如
var menus: [[String: Any]]
let dict : [String:Any] = ["name": NSLocalizedString("General", comment: ""),
"items": [
MenuItem(icon: UIImage.fontAwesomeIcon(FontAwesome.Heart, textColor: TubeTrends.Settings.foregroundColor, size: TubeTrends.Settings.menuIconSize), title: NSLocalizedString("Favorites", comment: ""), action: (indexPath) -> Void in
self.navigationController?.pushViewController(self.favoritesVideoListVC(), animated: true)
),
]
]
return [dict]
【讨论】:
感谢您的帮助。使用此解决方案,我得到上下文类型“任何”不能与“项目:”部分中的数组文字错误一起使用 那么你也需要单独声明(并注释)items
的值。
不幸的是,Swift 不能简单地推断出异构集合的“Any”。以上是关于上下文类型 'Any' 不能与数组文字 Swift 3 一起使用的主要内容,如果未能解决你的问题,请参考以下文章