Попытка сохранить измененное значение за пределами замыкания. Назначение length
от дочернего элемента в базе данных Firebase в вызове observeSingleEvent()
. Однако после функции присвоение length
не сохраняется для использования в for l oop, используется начальное значение.
Кроме того, I append()
связка GMSMarker
объектов к списку markers
, но снова добавления не сохраняются, и список возвращается пустым
Как я могу сохранить выполненные назначения в замыканиях. Я знаю, что в C ++ вы можете использовать &
как [&varName]
для передачи по ссылке. Не удалось найти что-то похожее в отношении Swift.
func loadMarkersFromDatabase(ref:DatabaseReference, node:String) -> [GMSMarker] {
var markers = [GMSMarker]()
var length:Int? = 1
ref.child("Config").observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
length = (value?["AcademicBuildingsLength"] as? Int ?? 0)
})
print(length!)
for i in 0...length! {
ref.child(node).child(String(i)).observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
let building = value?["building"] as? String ?? ""
let lat = value?["lat"] as? Double ?? 0.0
let lon = value?["long"] as? Double ?? 0.0
let marker = GMSMarker()
marker.position = CLLocationCoordinate2D(latitude: lat, longitude: lon)
marker.title = building
marker.snippet = node
markers.append(marker)
})
}
return markers
}
Я попытался добавить закрывающий блок [length]
, как это, но затем получил ошибку компиляции: Cannot assign to value: 'length' is an immutable capture
ref.child("Config").observeSingleEvent(of: .value, with: { [length](snapshot) in
let value = snapshot.value as? NSDictionary
length = (value?["AcademicBuildingsLength"] as? Int ?? 0)
})