Aguarde o Firebase carregar antes de retornar de uma função

Eu tenho uma função simples de carregar dados do Firebase.

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

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

    if songArray.isEmpty {
        return nil
    }
    return songArray
}

Atualmente esta função retornanil sempre, mesmo que haja dados para carregar. Ele faz isso porque nunca chega ao bloco de conclusão onde ele carrega a matriz antes que a função retorne. Estou procurando uma maneira de fazer com que a função retorne apenas depois que o bloco de conclusão foi chamado, mas não posso colocar retorno no bloco de conclusão.

questionAnswers(2)

yourAnswerToTheQuestion