为什么在更改闭包中的全局变量的值后,该变量返回到未更改的值?

时间:2019-05-18 16:34:00

标签: ios swift

嗨,我正在从Firebase中检索数据,并在检索到数据并将其存储在该闭包之外的变量后,该值返回到其先前的值

我试图创建一个返回字符串数组的函数,以直接更改全局变量。

这是我要在其中存储检索到的数据的变量的声明

var events: [String] = []
    override func viewDidLoad() {

        super.viewDidLoad()

        events = createEventsArray()

        tableView.delegate = self
        tableView.dataSource = self
    }

这是我首先创建的功能

func createEventsArray() -> [String]{
        var arrayEventos : [String] = []

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


        ref.child("eventos").child(uid!).observeSingleEvent(of: .value, with:  { (snapshot)  in
            for child in snapshot.children {
                let snap = child as! DataSnapshot
                let placeDict = snap.value as! [String: Any]
                let info = placeDict["direction"] as! String
                arrayEventos.append(info)
                print("Event Added")
            }//End for
        })//End closure
        return arrayEventos
    }

这是第二次尝试

func createEventsArray() {        

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

        ref.child("eventos").child(uid!).observeSingleEvent(of: .value, with:  { (snapshot)  in
            for child in snapshot.children {
                let snap = child as! DataSnapshot
                let placeDict = snap.value as! [String: Any]
                let info = placeDict["direction"] as! String
                self.events.append(info)
                print("Hola")
            }//End for
        })//End closure

    }

如您所见,在加载数组之后,必须使用该信息来创建TableView,但是当编译器尝试执行时

     tableView.delegate = self
     tableView.dataSource = self

出现nil错误

0 个答案:

没有答案