【问题标题】:Swift Get Element From Each Element In JSON ArraySwift 从 JSON 数组中的每个元素获取元素
【发布时间】:2021-06-29 02:11:48
【问题描述】:

所以我有一个存储数组的.json 文件。当我快速加载文件时,它被称为trackData。我想要做的是从trackData 访问这个数组中每个项目的嵌套项目。

例如,如果这是来自trackData 的一项:

[(id: UUID(), trackdate: DateComponents(year: 2021, month: 4, day: 2), tokencount: 2), (id: UUID(), trackdate: DateComponents(year: 2020, month: 8, day: 4), tokencount: 6)]

我想从 DateComponents 访问每个项目的特定年份。在这种情况下,只会返回两年:20212020

根据我在网上找到的内容,我尝试使用forEach,但我找不到任何这样的数组示例,其中每个元素中都有数据。

我对 swift 还很陌生,所以这可能是我忽略的基本内容。任何帮助是极大的赞赏。谢谢。

【问题讨论】:

  • 请添加您尝试过的代码以及遇到的问题。
  • 您可以使用filtermap?没有?

标签: arrays json swift element


【解决方案1】:

你可以如下尝试

let array = [(id: UUID(), trackdate: DateComponents(year: 2021, month: 4, day: 2), tokencount: 2), (id: UUID(), trackdate: DateComponents(year: 2020, month: 8, day: 4), tokencount: 6)]
let lastYearData = array.filter({ $0.trackdate.year == 2020}) //This will give you all objects which has year 2020
let allYears = array.compactMap({ $0.trackdate.year })
print(allYears) //This will print all non-null years

【讨论】:

    【解决方案2】:

    我不确定你真正想要什么,但如果你有像trackData 这样的项目数组并且你只需要year 组件,它可能是这样的吗?

    var tracks = [trackData,
                  //otherItems
    ]
    
    tracks.forEach {
        $0.compactMap {$0.trackdate.year}.forEach {year in
            print(year)
        }
    }
    

    这是你想要的吗?如果您真的需要特定年,在您编写时,您需要在compactMapforEach 之间使用.filter({[2020,2023].contains($0)}) 之类的东西。

    【讨论】:

      猜你喜欢
      • 2016-09-09
      • 2014-12-19
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 2018-09-20
      • 1970-01-01
      相关资源
      最近更新 更多