我刚刚在一个较早发布的问题中了解了异步功能,因此需要合并另一个功能。我正在从Firebase中读取条目列表,返回它们的列表,并将它们分配给数组。
现在的问题是,当我将数组返回到调用函数时,该数组现在为空,我不确定为什么。
这就是我收集Firebase条目的方式(工作正常):
func getListItems(uid: String, completion: (list: Array<String>?) -> Void) {
let ref = Firebase(url: getFirebaseURL() + "/" + uid)
var taskList = [String]()
ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
let enumerator = snapshot.children
while let rest = enumerator.nextObject() as? FDataSnapshot {
taskList.append(rest.value as! String)
}
completion(list: taskList)
})
}
这就是我调用该函数并尝试将其分配给本地数组的方式,因此我可以将这些项添加到TableView中:
// Retrieve database items
let uid = def.valueForKey("uid") as! String
getListItems(uid) {
(result) in
self.taskListItems = result!
//print(result) // This prints out an array filled with my data
}
print(taskListItems) // This prints an empty array
如果我执行
print(result)
,它会吐出一个完美的数组,但是当我打印要使用的本地数组时却不会。我已将taskListItems
定义为:var taskListItems = [String]()
我也尝试过使用
.append
也不起作用,因此我对发生的事情真的迷失了。 最佳答案
原因是在块中的print(taskListItems)
之前调用print(result)
的行。这是因为HTTP请求是异步的,并且在完成后(即在调用print(taskListItems)
之后)在块内执行代码。您应该做的就是在块中使用代码来使用结果。
关于ios - 异步函数返回正常,但数组为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36243205/