Aguardando a conclusão da chamada de função assíncrona

Sei que essa pergunta já foi feita antes, mas todas as soluções não funcionam para mim.

Eu tenho uma função com envia parâmetros para uma API e retorna os dados como uma lista. Eu tenho um UITableView configurado para usar essa lista, mas ele é executado antes que a lista seja atribuída a uma variável.

código:

var functionResult = [String]()
override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        //gradesscrollView.contentSize.height = 3000
        fetchItems{ (str) in

            var returnedItems = [String]()

            let result = self.convertoArray(itemstoPass: str!)
            for i in result{
                functionResult.append(i)
            }
        }

        self.tableofItems.delegate = self
        self.tableofItems.dataSource = self //Data source is set up to use functionResult, however functionResult is empty before fetchItem runs.


}

Eu apreciaria se não fosse votado imediatamente como duplicado, eis o que tentei.

Grupos de expediçãoTempo do semáforovariáveis em execuçãoIncluindoself.tableofItems.delegate = auto &self.tableofItems.dataSource = auto nofetchItems{ (str) in parte.

EDIT: buscar itens foi solicitado,

func fetchItems(completionHandler: @escaping (String?) -> ()) -> () {
        let headers = [
            "Content-Type": "application/x-www-form-urlencoded"
        ]
        //Switch to keychain
        let username = UserDefaults.standard.object(forKey: "username") as! String?
        let password = UserDefaults.standard.object(forKey: "password") as! String?

        let usernametoSend = username!
        let passwordtoSend = password!

        print(usernametoSend)
        print(passwordtoSend)
        let parameters: Parameters = [
            "username": usernametoSend,
            "password": passwordtoSend
        ]

        Alamofire.request("https://www.mywebsite.com/API/getItems", method: .post, parameters: parameters, headers: headers)
            .responseString { response in
                completionHandler(String(response.result.value!))

questionAnswers(2)

yourAnswerToTheQuestion