смотреть обновление между функциями, которые выполняются, когда кнопка нажата

у меня есть 3 наклейки и uibutton на мой взгляд. после того, как я нажмите кнопку uibutton некоторые функции выполняются и я хочу сделать следующее:

как только рисунок 1 загрузка закончится метка 1 должна обновляться, после рисунок 2-завершения загрузки метка 2 должна обновляться и так далее.

проблема: с моей точки зрения, так что мои ярлыки, все обновляется сразу после того, как все функции решаются...

я читал про асинхронные задачи - но в моем понимании мне не нужна, потому что я не возражаю, если пользователь не может нажать на кнопки тех пор, пока все функции выполняются, все что я хочу-это вид(ярлыки), чтобы обновить во время выполнения функции, а не только после того, как все будет завершено...

вот мой код:

@ibaction func buttonloadpictures(_ sender: uibutton) {    // picture1    downloadimage()    labelresult1.text = "ready"    // picture2    downloadimage()    labelresult2.text = "ready"    // picture3    downloadimage()    labelresult3.text = "ready"}

редактировать:

потому что меня попросили код внутри downloadimage():downloadimage был просто заполнитель для многих функций у меня в этом месте. но в моем понимании это не актуально, какой код конкретно. в случае, я добавил пример для downloadimage(). проблема в том, я не хочу, чтобы обновить метки все сразу после выполнения всех функций, но после каждый раз после "donwnloadimage()"

func downloadimage(){        guard let myurl = url(string: mylink) else {                                                             print("error: \(mylink) doesn't seem to be a valid url")            return        }        do {            mylinkhtmlcontent = try string(contentsof: myurl, encoding: .ascii)            print(mylinkhtmlcontent)        } catch let error {            print("error: \(error)")        }