使用 Realm 创建其他模型的数组 - SwiftUI

Create array of other model with Realm - SwiftUI

我有两个模型要存储在领域数据库中。他们是团队和球员。每个团队将有 x 名玩家,我希望可以通过团队访问这些玩家。例如。用户选择一个团队,然后选择任何相应的球员。我希望用户最终能够创建一个新团队,创建新玩家并将玩家分配到一个团队

class Team: Object{
    @objc dynamic var teamName: String = ""
    @objc dynamic var players: [Player] = []
}

class Player: Object{
    @objc dynamic var playerName: String = ""
    @objc dynamic var shirtNumber: Int = 0
}

然后我将如何看待访问这些新模型,更具体地说,迭代团队以及内部球员的好方法是什么。

我对 Realm 和我的应用程序中的数据库概念还很陌生,所以不太确定从哪里开始

首先,您想利用 List 对象而不是数组来存储团队中的球员:

class Team: Object{
    @objc dynamic var teamName: String = ""
    let playerList = List<Player>()
}

这将创建一对多关系(一个团队有很多玩家)。

如果您需要从玩家返回到团队,您可以通过直接关系手动完成

class Player: Object{
    @objc dynamic var playerName: String = ""
    @objc dynamic var shirtNumber: Int = 0
    @objc dynamic var myTeam: Team!
}

或者您可以让 Realm 为您管理它并自动创建反向关系*

class Player: Object{
    @objc dynamic var playerName: String = ""
    @objc dynamic var shirtNumber: Int = 0
    var teams = LinkingObjects(fromType: Team.self, property: "playerList")
}

至于遍历球队和球员,只需一个简单的 for 循环就可以了

let teamResults = realm.objects(Team.self)

for team in teamResults {
   print(team.teamName)
   for player in team.playerList {
       print("  player: \(player.playerName)"
   }
}

*请注意,LinkingObjects 是复数形式。它实际上创建了一个多对多的关系——这意味着一个球员可以被链接回多个球队。这通常不是问题,更多的是设计选择。