I have images stored in FireBase Storage, and matching file name data in FireBase Database, and I want to get those photos and display them (note, there is still some code I need to write because I am not getting EVERY photo from storage. Just those that are returned from a query of the database)
This code in DBHandler works, as I can see the print of the image file names
func photoListForLocation() -> [String]{
let file_name:String = String()
var photos = [file_name]
ref.observeSingleEvent(of: .value) { (snapshot) in
if let snapshot = snapshot.children.allObjects as? [DataSnapshot]{
for snap in snapshot {
if let data = snap.value as? [String:Any]{
let imageName:String = data["image_name"]! as! String
photos.append(imageName)
print("photos.append - \(imageName)")
}//if let data
}//for
}//snapshot
}//ref.observeSingleEvent
return photos
}//photoListForLocation
BUT the "return photos" never happens.. So the following in my ViewController does nothing..
let dbHandler:DBHandler = DBHandler()
var fileList = [String]()
fileList = dbHandler.photoListForLocation()
fileList.forEach {fileName in
print("\(fileName)")
}
Of course, if there is a better or simpler way of accomplishing my goal, I'm all ears.
for Mr. Tomato... (see comments)
import Foundation
import FirebaseDatabase
import GoogleMaps
class DBHandler {
var ref:DatabaseReference! = Database.database().reference().child("locations")
var imageCount:Int = 0
func addLocation(coordinate:CLLocationCoordinate2D, rating: Double, imageName: String?){
let location = ["latitude": coordinate.latitude,
"longitude": coordinate.longitude,
"rating": rating,
"image_name": imageName!,
"postDate": ServerValue.timestamp()
] as [String : Any]
self.ref.childByAutoId().setValue(location)
}//end setLocation
func getImageListForLocation(lattitude:Double, longitude:Double) -> [String]{
var images = [String]()
self.ref.observeSingleEvent(of: .value) { (snapshot) in
if let snapshot = snapshot.children.allObjects as? [DataSnapshot]{
for snap in snapshot {
if let data = snap.value as? [String:Any]{
let thisLattitude = data["latitude"]
let thisLongitude = data["longitude"]
guard let imageName = data["image_name"] else {return}
if lattitude == thisLattitude as! Double && longitude == thisLongitude as! Double {
images.append(imageName as! String)
}//if
}//if
}//for
}//if
}//ref
self.imageCount = images.count
return images //DOES NOT RETURN IMAGES!! (FILE NAMES)
}//getImageListForLocation
}//DBHandler