Swift Dictionary:将值作为数组获取

 许馨玲千娟 发布于 2022-12-10 19:16

我有一个包含UIColor由枚举值散列的对象的字典,ColorScheme:

var colorsForColorScheme: [ColorScheme : UIColor] = ...

我希望能够提取此字典包含的所有颜色(值)的数组.我认为我可以使用该values属性,就像在迭代字典值(for value in dictionary.values {...})时使用的那样,但这会返回错误:

let colors: [UIColor] = colorsForColorSchemes.values
                        ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
'LazyBidrectionalCollection, UIColor>>' is not convertible to 'UIColor'

似乎不是返回Array值,该values方法返回更抽象的集合类型.有没有办法获得Array包含字典的值而不在for-in循环中提取它们?

4 个回答
  • 您还可以将字典映射到值数组:

    let colors = colorsForColorScheme.map { $0.1 }
    

    Closure从字典中获取键值元组并仅返回一个值.因此,map函数会生成一个值数组.

    2022-12-11 02:08 回答
  • 从Swift 2.0开始,现在Dictionaryvalues属性返回LazyMapCollection而不是a LazyBidirectionalCollection.该Array类型知道如何使用此抽象集合类型初始化自身:

    let colors = Array(colorsForColorSchemes.values)
    

    Swift的类型推断已经知道这些值是UIColor对象,因此不需要类型转换,这很好!

    2022-12-11 02:09 回答
  • 使用 colorsForColorScheme.map({$0.value})

    2022-12-11 02:14 回答
  • 你可以创建一个扩展 LazyMapCollection

    public extension LazyMapCollection  {
    
        func toArray() -> [Element]{
            return Array(self)
        }
    }
    

    colorsForColorSchemes.values.toArray() 要么 colorsForColorSchemes.keys.toArray()

    2022-12-11 03:12 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有