我被建议在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中处理与结构的关系?上述两种方法中的一种方法比另一方更好,还是有更好的方法?
答案 0 :(得分:2)
你被告知使用结构而不是类?你曾经有过。或者你只是不明白你得到的任何建议。
结构是值类型。类是引用类型。这意味着你不能引用结构。两个结构=两个不同的目标=两倍的记忆。您可以引用类实例。
假设你有1000名玩家都玩同一款游戏。使用结构,你有1000份游戏。更糟糕的是,游戏将拥有每个玩家的副本,每个游戏都有一个游戏副本,每个游戏都有一个副本,每个游戏都有一个游戏副本,依此类推。
这就是你制作玩家和游戏类的原因。