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

时间:2016-11-26 13:25:19

标签: swift struct relationship

我被建议在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中处理与结构的关系?上述两种方法中的一种方法比另一方更好,还是有更好的方法?

1 个答案:

答案 0 :(得分:2)

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

结构是值类型。类是引用类型。这意味着你不能引用结构。两个结构=两个不同的目标=两倍的记忆。您可以引用类实例。

假设你有1000名玩家都玩同一款游戏。使用结构,你有1000份游戏。更糟糕的是,游戏将拥有每个玩家的副本,每个游戏都有一个游戏副本,每个游戏都有一个副本,每个游戏都有一个游戏副本,依此类推。

这就是你制作玩家和游戏的原因。