如何处理与 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 的原因。
有人建议我在 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 的原因。