gpt4 book ai didi

swift - 如何在 Swift 中处理与结构体的关系?

转载 作者:搜寻专家 更新时间:2023-11-01 07:18:03 25 4
gpt4 key购买 nike

有人建议我在 Swift 中尽可能多地使用结构体,因为很多东西已经是结构体了(Int、String、Array、Dictionary,几乎所有东西都是)。

但如果我有一个关系(有一个反向关系)要处理,我无法想出一个令人满意的解决方案,尤其是在 UITableView 的数据源的情况下。 。许多例子中的一个:Game具有多个 Player 的对象, 和每个 Player有多个Game .

方法一

我将同一结构的所有实例存储在一个列表中,我为每个实例分配一个 id,并在每次需要相关对象时获取列表。

var allGames: [Game] = []
struct Game {
let id: String
var playerIds: [String]
var players: [Player] {
get { return allPlayers.filter({ playerIds.contains($0.id) }) }
}
}
var allPlayers: [Player] = []
struct Player {
let id: String
var gameIds: [String]
var games: [Game] {
get { return allGames.filter({ gameIds.contains($0.id) }) }
}
}

方法二

我远离结构。

class Game {
var players: [Player] = []
}
class Player {
var games: [Game] = []
}

问题

如何在 Swift 中处理与结构体的关系?上述两种方法中的一种比另一种更好,还是有更好的方法?

最佳答案

你被告知要使用结构而不是类?你已经被拥有了。或者你只是不明白你得到的任何建议。

结构是值类型。类是引用类型。这意味着您不能引用结构。两个结构 = 两个不同的对象 = 双倍的内存。您可以引用类实例。

假设您有 1000 名玩家都在玩同一款游戏。使用结构,您拥有 1000 个游戏副本。更糟糕的是,游戏将有每个玩家的副本,每个玩家都有一个游戏副本,每个玩家都有一个副本,每个玩家都有一个游戏副本,等等。

这就是为什么要创建 Player 和 Game

关于swift - 如何在 Swift 中处理与结构体的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40818782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com