最近、関数がWebリクエストから必要な情報を取得するとUIを更新する必要があるようなことに取り組んできました。非同期呼び出しの空のクロージャ
この関数で空のクロージャを渡して同じ関数でクロージャを呼び出すと、データがダウンロードされた後にUIが更新されることがわかりました(クロージャなしでUIを更新しようとする前にデータがまだダウンロードされていたためにプログラムがクラッシュしました)。私のビューコントローラに続いて
func DLDetails(completed: DLComplete) {
let url = "string"
Alamofire.request(GET, url).responseJSON { response in
//Getting all the data I need and putting them in variables
} completed()
:ここ
typealias DLComplete =() ->()
は、関数がどのように見えるかです:したがって、基本的
ViewDidLoad() {
super.viewdidload()
DLDetails() {
//call function that updates UI
}
}
、イム
は、最初に私はタイプのエイリアスを作成しました不思議なことに、なぜこのような空のクロージャを作成すると、プログラムは最初にデータをダウンロードでき、データがダウンロードした後、UIを更新します。すべてはどのように機能していますか?
私のDLDetails
関数で空のクロージャを呼び出す方法は私のVCでこの関数を呼び出すことができるので、私は更新UI関数を呼び出すことができる別のクロージャを開きますか?
私は閉鎖に新しいので、データがダウンロードされた後、() ->()
が私のView Controllerで更新UI機能を呼び出すことができる方法さえもわかりません。
'() - >()'は空のクロージャではありません。パラメータを持たず、戻り値もないのは、クロージャの*型*です。 –
...メインスレッドのUIを更新します。 –