Arrays 如何在Firebase(SWIFT)中获取二级数据
我的数据库结构如下: 如您所见,我为每个Arrays 如何在Firebase(SWIFT)中获取二级数据,arrays,swift,firebase,Arrays,Swift,Firebase,我的数据库结构如下: 如您所见,我为每个用户发布了不同的帖子。帖子的关键是创建它们的时间 我在帖子中有一个孩子叫selectedTeam。对于某些帖子来说,这个孩子是存在的,对于某些帖子来说,这个孩子将来可能会存在 我的目标是让所有帖子的selectedTeam中的所有孩子。如果某些帖子selectedTeam不存在,那么就应该忽略它。 selectedTeam子项如下所示: class PaymentHomeViewController: UIViewController { @I
用户发布了不同的帖子。帖子的关键是创建它们的时间
我在帖子中有一个孩子叫selectedTeam
。对于某些帖子来说,这个孩子是存在的,对于某些帖子来说,这个孩子将来可能会存在
我的目标是让所有帖子的selectedTeam
中的所有孩子。如果某些帖子selectedTeam
不存在,那么就应该忽略它。
selectedTeam
子项如下所示:
class PaymentHomeViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var headerSeperator: UIView!
var members = [PaymentTeam]()
var members3D = [[PaymentTeam]]()
var posts = [Post]()
var projectCreated:String?
var projectTitle = ""
var projectNames = [String]()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UserService.posts(for: User.current) { (posts) in
self.posts = posts
for post in posts {
self.projectNames.append(post.projectCreated)
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
for value in projectNames {
UserService.chosenTeam(for: User.current, projectCreated: value) { (chosenTeam) in
var tempArray = [PaymentTeam]()
self.members = chosenTeam
self.members.append(contentsOf: tempArray)
}
}
}
struct UserService {
static func chosenTeam(for user: User, projectCreated: String, completion: @escaping ([PaymentTeam]) -> Void) {
let ref = Database.database().reference().child("posts").child(user.uid).child(projectCreated).child("selectedTeams")
ref.observe(DataEventType.value, with: { (snapshot) in
guard let snapshot = snapshot.children.allObjects as? [DataSnapshot] else {
return completion([])
}
let chosenTeam = snapshot.reversed().compactMap(PaymentTeam.init)
completion(chosenTeam)
})
}
}
最后,我想将每个selectedTeam
存储在一个三维数组中,这样我就可以用一个标题填充UITableView
所有这些都没关系。
我的问题是,我无法让它工作,获取数据
我现在的解决方案是,我认为它会起作用的是:
我正在获取所有posts
键,这些键是projectCreated
将其存储在阵列中并按如下方式执行:
class PaymentHomeViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var headerSeperator: UIView!
var members = [PaymentTeam]()
var members3D = [[PaymentTeam]]()
var posts = [Post]()
var projectCreated:String?
var projectTitle = ""
var projectNames = [String]()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UserService.posts(for: User.current) { (posts) in
self.posts = posts
for post in posts {
self.projectNames.append(post.projectCreated)
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
for value in projectNames {
UserService.chosenTeam(for: User.current, projectCreated: value) { (chosenTeam) in
var tempArray = [PaymentTeam]()
self.members = chosenTeam
self.members.append(contentsOf: tempArray)
}
}
}
struct UserService {
static func chosenTeam(for user: User, projectCreated: String, completion: @escaping ([PaymentTeam]) -> Void) {
let ref = Database.database().reference().child("posts").child(user.uid).child(projectCreated).child("selectedTeams")
ref.observe(DataEventType.value, with: { (snapshot) in
guard let snapshot = snapshot.children.allObjects as? [DataSnapshot] else {
return completion([])
}
let chosenTeam = snapshot.reversed().compactMap(PaymentTeam.init)
completion(chosenTeam)
})
}
}
我的UserService
如下所示:
class PaymentHomeViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var headerSeperator: UIView!
var members = [PaymentTeam]()
var members3D = [[PaymentTeam]]()
var posts = [Post]()
var projectCreated:String?
var projectTitle = ""
var projectNames = [String]()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UserService.posts(for: User.current) { (posts) in
self.posts = posts
for post in posts {
self.projectNames.append(post.projectCreated)
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
for value in projectNames {
UserService.chosenTeam(for: User.current, projectCreated: value) { (chosenTeam) in
var tempArray = [PaymentTeam]()
self.members = chosenTeam
self.members.append(contentsOf: tempArray)
}
}
}
struct UserService {
static func chosenTeam(for user: User, projectCreated: String, completion: @escaping ([PaymentTeam]) -> Void) {
let ref = Database.database().reference().child("posts").child(user.uid).child(projectCreated).child("selectedTeams")
ref.observe(DataEventType.value, with: { (snapshot) in
guard let snapshot = snapshot.children.allObjects as? [DataSnapshot] else {
return completion([])
}
let chosenTeam = snapshot.reversed().compactMap(PaymentTeam.init)
completion(chosenTeam)
})
}
}
也许有人知道如何做得更好,或者至少知道如何工作。
原因成员
以及成员3d
始终为空
谢谢你的帮助