我正在尝试使用Swift在闭包内部设置一个变量。 然后,我想在闭包之外检索值以进行进一步处理。 我似乎做不到。 有什么办法可以做到吗? 我尝试了下面的代码。 我已经评论了我实际上希望执行操作的部分。

class AttendanceDetailTVC: UITableViewController {

    var TPNumber = ""
    var Module = ""
    var AID = ""
    var intake = ""

    @IBOutlet var tblDetail: UITableView!

    var detailList = [DetailModel]()


    var ref = Database.database().reference()

    override func viewDidLoad() {
        super.viewDidLoad()
        tblDetail.delegate = self
        tblDetail.dataSource = self

        ref.child("Student").child(TPNumber).child("Intake").observeSingleEvent(of: .value, with: {(snapshot) in
            self.intake = (snapshot.value as? String)!
            self.detailList.removeAll()
        })
        ref.child("Record").observe(.value) { (snapshot) in
            for child in snapshot.children.allObjects as! [DataSnapshot] {
                let value = child.key

                self.ref.child("Attendance").child(value).child("Intake").observe(.value, with: { (snapshot) in
                    for child1 in snapshot.children.allObjects as! [DataSnapshot] {
                        let value1 = child1.key

                        self.ref.child("Attendance").child(value).child("Intake").child(value1).observe(.value, with: { (snapshot) in
                            if let value2 = snapshot.value as? String {
                                if (self.intake == value2) {
                                    self.AID = value //This is where I set the value
                                }
                            }
                        })
                    }
                })
            }
            let det = DetailModel(AID: self.AID as String?) //This is where I want to use the value
            self.detailList.append(det)

            self.tblDetail.reloadData()
        }
    }

任何帮助,将不胜感激! 提前致谢!

#1楼 票数:3

您可以一次执行所有功能,而无需等待首先实际获取数据:

override func viewDidLoad() {
    super.viewDidLoad()
    tblDetail.delegate = self
    tblDetail.dataSource = self
    ref.child("Record").observe(.value) { (snapshot) in
        for child in snapshot.children.allObjects as! [DataSnapshot] {
            let value = child.key

            self.ref.child("Attendance").child(value).child("Intake").observe(.value, with: { (snapshot) in
                for child1 in snapshot.children.allObjects as! [DataSnapshot] {
                    let value1 = child1.key

                    self.ref.child("Attendance").child(value).child("Intake").child(value1).observe(.value, with: { (snapshot) in
                        if let value2 = snapshot.value as? String {
                            if (self.intake == value2) {
                                self.AID = value //This is where I set the value
                                self.reloadTable()
                            }
                        }
                    })
                }
            })
        }
    }
}
func reloadTable() {
    let det = DetailModel(AID: self.AID) //This is where I wanna retrieve the value
    self.detailList.append(det)
    self.tblDetail.reloadData()
}

  ask by Muhammad Hasan Khan translate from so

未解决问题?本站智能推荐:

1回复

使用Swift闭包和Firebase处理异步数据

我需要调用特定的 Firebase 参考并取回数据。 此操作将在多个 VC 内进行,因此我想要一个类,在其中我将拥有调用 Firebase 的各种函数。 例如,如果我想获取所有文章,我将调用我的 FirebaseHelpers 类,并使用方法/闭包fetchArticles() 。 这样,如果我想重
1回复

使用firebase块编译的Swift闭包

我正在关注一个在线课程(从2016年12月起),我在这个截图中收到错误。 这是我的代码:// // FirebaseManager.swift 以下是此示例中代码的屏幕截图: 我查看了几个SO问题,包括这一个 ,但没有看到适用于我的情况的答案。 请参阅我的附件我的swift版
1回复

如何在Swift的闭包中编辑全局变量?[复制]

这个问题在这里已经有了答案: 从 Swift 函数中的异步调用返回数据(13 个回答) 去年关闭。 我正在使用 Xcode 和 Swift 编程语言开发一个
1回复

快速从另一个函数访问闭包内部的变量

我正在尝试创建一个列出某些服务的应用,用户可以在其中对每个服务进行评分。 来自每台服务器的评级将保存在firebase数据库中。 我可以使用以下功能检索所有评分并计算平均值: 如您所见,平均值在函数内部的两个连续闭包中打印。 但是,我在单独的swift文件的另一个函数中使用这些平均值时
1回复

在Swift中使用闭包从函数中检索字符串值

我正在尝试从Firebase检索字符串值,以获取具有唯一UID的每个用户名,该UID传递给函数,该函数返回用户的用户名。 但是-由于ObserveEvent在closures ,因此我无法返回任何值,因为操作是异步发生的(?)。 我想知道这是否是实现此目标的方法? 该函数如下所示:
1回复

Firebase闭包中的访问变量

我有以下Firebase查询,其中检查数据库中是否已存在用户名。 我想为一个名为usernameAlreadyExists的变量赋一个布尔值(true)。 但是,我需要在闭包之外使用其新值来访问此变量。 我读到我需要实现completionHandler或回调才能执行此操作。 但是,我不
1回复

在闭包之外访问数据,FirebaseObserveSingleEvent//SWIFT

当我第一次问这个问题时,我还没有真正做过研究。 但是经过20多个小时之后,我的结构与Firebase文档中的结构完全一样。 但是,我无法在闭包之外访问任何数据。 这是应该将数据写入其中的结构: 而且,当它被调用时,所有内容都完美地写入了数据库,在闭包内部,它不会输出nil,它显然会打印
1回复

获取检索到的节点的值并在全球范围内使用它们!(Firebase和Swift)

我正在尝试从仪表板的UserProfile节点中获取一些值,并将它们传递到全局变量中,以在watch函数之外全局使用它们。 我想将它们传递给watch函数之外,以便可以在.swift文件中的任何位置全局使用它们。