上下文类型 '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 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

尝试从数组中删除元素时出现此错误:上下文类型“Int”不能与数组文字一起使用

上下文类型“AnyObject”不能与字典文字一起使用?

Swift:具有特定类型的Any对象的过滤器数组

swift中泛型和 Any 类型

swift中的异构集合文字

Alamofire 上下文类型 anyobject 不能与字典文字一起使用