【问题标题】:SWIFT "3 levels array"SWIFT“3 级数组”
【发布时间】:2022-01-11 04:22:40
【问题描述】:

我在 OSX 的 swift 5 中使用数组和声明它有一点问题:

  • 我知道[[String]] 是一个数组数组,例如[["team1", "2 goals"], ["team2", "0 goals"]]。好吧,这对我来说很容易,但让我解释一下我的情况:

  • 我有一个“系统”数组,就像 -> ["nes", "Xbox" , "ps2"]

  • 每个“系统”都有“游戏”,“游戏”中的每个“游戏”都有一系列属性,例如“名称”、“缩略图”、“视频”等...

我需要创建一个类似 ->

的数组
["xbox" , [["game1",array of properties],["game2", array of properties]]]

我试图定义一个[[[String]]]

var allMyGames = [[[String]]]()

但我不知道如何将 myGames.append 这个...

我有一个名为 myGames = [[String]]() 的数组,其中包含 ["game1", "property1", "property2" ,"property3"] ["game2", "property1", "property2" ,"property3"]

另一个带有mySystems = [String]()系统的数组包含["nes", "xbox", "ps2"]之类的数据

有什么想法吗?

提前致谢

【问题讨论】:

  • 您正在使用数组来对不类似数组的数据进行建模,这总是会让事情变得困难。我认为您应该考虑使用结构来建模您的数据。看起来你需要一个GameGameSystem 结构,然后你可以在GameSystem 结构上创建一个supportedGames: [Game] 字段。见docs.swift.org/swift-book/LanguageGuide/…
  • 最好将数据建模为结构体,而不是像这样使用数组。
  • 是的,只有当您拥有可变数量的相同事物(例如游戏机或游戏)时,数组才适合。拥有一系列控制台是有意义的。然而,一个 Console 对象应该是一个结构体,就像一个游戏一样。 Game 结构体内部将是游戏不同属性的字段。
  • 在某些情况下,3 维数组可能是一个不错的选择,但这似乎不是其中一种情况。

标签: swift string data-modeling


【解决方案1】:

你会更好地使用结构来建模你的问题。这是一个开始,您可以展示如何开始对问题进行建模。

好的,让我们从创建一个包含名称、缩略图和视频的游戏开始。

struct Game {
  let name: String
  let thumbnailURL: URL
  let videoURL: URL
}

现在我们可以创建一个系统...

struct System {
  let name: String
  let games: [Game]
}

现在您可以创建您的系统阵列...

let systems = [
  System(
    name: "Xbox",
    games: [
      Game(name: "Halo", thumbnailURL: ... videoURL: ...),
    ]
  ),
  System(
    name: "NES",
    games: [
      Game(name: "Super Mario Bros", thumbnailURL: ... videoURL: ...),
    ]
  )
]

如您所见,您最终获得了一种更简单的方法来对不同的系统和游戏等进行建模...

【讨论】:

  • 我正在从多个 xml 文件中检索数据,因此我需要以编程方式填充所有内容。你能给我一个以编程方式填充系统结构并遍历系统的例子吗,我在数组方式上更好,而在结构方式上却不多
  • 这在很大程度上取决于您的数据是什么样的。它必须是xml吗?将它作为json数据会更有意义。但是,请搜索 Codable 协议。它会在这里帮助你。否则,您应该提出一个新问题以获得进一步的帮助。
  • 我的意思是如何像在 for 循环中一样填充您建议的系统数组。我可以毫无问题地解析 xml
  • 这超出了您提出的问题的范围,因此确实应该是一个新问题。我建议您提出问题并展示您当前是如何解析 xml 的。这样我们就可以使用您当前必须改进的代码。这个问题没有显示任何关于从 xml 解析数据的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
相关资源
最近更新 更多