Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在Firebase(SWIFT)中获取二级数据_Arrays_Swift_Firebase - Fatal编程技术网

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
始终为空

谢谢你的帮助