Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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
Swift:如何为从firebase数据库获取数据的函数实现完成处理程序_Swift_Firebase_Firebase Realtime Database_Completionhandler - Fatal编程技术网

Swift:如何为从firebase数据库获取数据的函数实现完成处理程序

Swift:如何为从firebase数据库获取数据的函数实现完成处理程序,swift,firebase,firebase-realtime-database,completionhandler,Swift,Firebase,Firebase Realtime Database,Completionhandler,我编写了从firebase数据库检索数据并将其附加到名为toWatchMoviesListInitial的数组的代码。但是,在附加数据后,如果将的值打印到WatchMoviesListInitial,则不会打印任何内容。 我被告知这是因为这是异步的。要处理这个问题,可以使用完成处理程序。 然而,我是swift新手,不知道如何实现完成处理程序。如果你能告诉我怎么做,我将不胜感激。这是我的密码: func initialiseTicketsList() { ref = Database.da

我编写了从firebase数据库检索数据并将其附加到名为
toWatchMoviesListInitial
的数组的代码。但是,在附加数据后,如果将
的值打印到WatchMoviesListInitial
,则不会打印任何内容。
我被告知这是因为这是异步的。要处理这个问题,可以使用完成处理程序。
然而,我是swift新手,不知道如何实现完成处理程序。如果你能告诉我怎么做,我将不胜感激。这是我的密码:

func initialiseTicketsList() {
    ref = Database.database().reference()
    let uid = Auth.auth().currentUser?.uid
    ref?.child("users").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
        if let dictionary = snapshot.value as? [String: AnyObject] {
            let userDict = dictionary["watchList"] as? [String:String]
            for (_,myValue) in userDict! {
                if myValue.contains("ignore"){
                }
                else{
                    print(type(of: myValue))
                    self.toWatchMoviesListInitial.append(myValue)
                }
            }
        }
    }, withCancel: nil)

    print(toWatchMoviesList)     //prints empty when it shouldn't
}
请阅读有关
关闭
@转义
的信息,网址为

func initialiseTicketsList(completionHandler: @escaping ([String]) -> Void) {
    ref = Database.database().reference()
    let uid = Auth.auth().currentUser?.uid
    ref?.child("users").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
        if let dictionary = snapshot.value as? [String: AnyObject] {
            let userDict = dictionary["watchList"] as? [String:String]
            var toWatchMoviesListInitial: [String] = [] //local variable
            for (_,myValue) in userDict! {
                if myValue.contains("ignore"){
                }
                else{
                    print(type(of: myValue))
                    toWatchMoviesListInitial.append(myValue)
                }
            }
            completionHandler(toWatchMoviesListInitial) // callback invoked.
        }
    }, withCancel: nil)
}

// wherever you call initialiseTicketsList, call with completionHandler
initialiseTicketsList(completionHandler: {movieList in
 self.toWatchMoviesList = movieList // or append based on your usecase.
}