如何处理与 Swift 中结构的关系?

How to deal with relationships with structs in Swift?

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

但是如果我有一个关系(有一个反向)要处理,我无法想出一个令人满意的解决方案,特别是在 UITableView[ 的数据源的情况下=35=]。举个例子:一个 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([=11=].id) }) }
    }
}
var allPlayers: [Player] = []
struct Player {
    let id: String
    var gameIds: [String]
    var games: [Game] {
        get { return allGames.filter({ gameIds.contains([=11=].id) }) }
    }
}

方法二

我远离结构。

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

问题

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

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

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

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

这就是为什么您制作玩家和游戏 classes 的原因。