Daha önce gönderdiğim bir soruda Async işlevleri hakkında yeni bir şeyler öğrendim ve bir tane daha eklemem gerekiyordu. Firebase'in girdilerinin bir listesini okuyorum, bir listesini döndürüyorum ve bunları bir diziye atadım.Async işlevi iyi bir şekilde döner, ancak dizi boşalır
Artık sorun, diziyi arama işlevine döndürdüğümde, dizi şimdi boş ve neden emin değilim.
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)
})
}
Ve bu bu işlevi çağırmak ve ben bu öğeleri ekleyebilir böylece yerel bir diziye atamak çalışıyorum nasıl:
Ben Firebase girdileri topluyorum nasıl budur (çalışıyor) bir TableView: Ben print(result)
yaparsanız
// 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
mükemmel bir dizi tükürür, ama ben kullanmaya çalışıyorum yerel dizi yazdırmak değilken. Ben taskListItems
tanımlanmış: var taskListItems = [String]()
Ayrıca çalışmayan .append
kullanmayı denedim, bu yüzden neler olup bittiğini gerçekten kaybettim.
Bir yarış durumunuz var. Kapağın içindeki kod ayrı bir iş parçacığı üzerinde gerçekleşiyor. Dizininizi yazdırdığınız zaman, kapatma kodu tamamlanmadı. – ryantxr
Bu, birçok kez Stack Overflow ile ele alındı, bu yüzden lütfen sormadan önce arayın. Bkz., Örneğin, benim cevabım burada: http://stackoverflow.com/a/33699235/341994 – matt
@matt Evet, ** ** async işlevleri hakkında bilgi aldım, açıkçası ben ** öğrenmedim. neden burada soruyorum – dsch