Espere a que se cargue Firebase antes de regresar de una función

Tengo una función simple que carga datos de Firebase.

func loadFromFireBase() -> Array<Song>? {
    var songArray:Array<Song> = []

    ref.observe(.value, with: { snapshot in
        //Load songArray
    })

    if songArray.isEmpty {
        return nil
    }
    return songArray
}

Actualmente esta función regresanil&nbsp;siempre, aunque haya datos para cargar. Hace esto porque nunca llega a realizar el bloque de finalización donde carga la matriz antes de que regrese la función. Estoy buscando una manera de hacer que la función solo regrese una vez que se haya llamado al bloque de finalización, pero no puedo poner return en el bloque de finalización.