【问题标题】:Array that looks like dictionary?看起来像字典的数组?
【发布时间】:2019-10-03 21:35:59
【问题描述】:

所以我有一个 plist,其中包含我想在我的项目中访问的许多项目。 plist 是一个项目数组,这些项目又是类型为 string:string (Item1 -> "name" : "somename", "description" : "somedescription") 的字典

我只想访问我的项目的名称值,并显示在一个数组中。我已经设法使用以下代码检索了 plist 中的所有键值对:

let path = Bundle.main.path(forResource: "PlistName", ofType: "plist")
let dict = NSArray.init(contentsOf: URL.init(fileURLWithPath: path!)) as! [[String:String]]

通过使用 print(dict),我可以将所有内容打印到控制台,但是就像我说的,我只想要数组中项目的名称。

最让我困惑的是 dict 等于 [[String:String]] 类型的 NSArray。我不明白数组如何是 String:String 类型的。这对我来说就像一本字典。我尝试将 NSArray 更改为 NSDictionary,但这给了我一个错误提示

“从 'NSDictionary' 转换?到不相关的类型 '[[String : String]]' 总是失败”

我也无法利用 dict 的键或值。

【问题讨论】:

  • [String: String] 是一本字典。 [[String: String]] 是一个字典数组。
  • 啊,这解释了很多,谢谢!那么,将其分解为仅包含一个字典值的数组的最简单方法是什么?

标签: arrays swift swift-dictionary


【解决方案1】:
let oneDict = dict[0]

返回一个字典,如果你真的想要一个字典的数组,这样做:

let array = [oneDict]

【讨论】:

    【解决方案2】:

    您可以使用 mapcompactMap 函数提取特定键的值,在这种情况下,我使用 compactMap 以防其中一个字典不包含名称

    let arrayOfDictionaries = [["name": "a", "some": "x"],
                               ["name": "b", "some": "y"],
                               ["some": "z"],
                               ["name": "c"]]
    
    let names = arrayOfDictionaries.compactMap {$0["name"]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-20
      • 2020-02-29
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2017-12-06
      相关资源
      最近更新 更多