簡體   English   中英

我的 Swift 應用程序完成處理程序似乎不起作用

[英]My Completion Handler for a Swift App Doesn't Seem to Work

我正在使用此處找到的方法將街道地址轉換為坐標點。 我的完成處理程序成功后,應該將坐標點添加到我已經初始化的列表中,但是當我進入調試模式時,完成處理程序被完全忽略,導致索引超出范圍錯誤。 我想我的完成處理程序有問題,可以在下面找到:

func setUp() {
    for a in addresses {
        print(a)
        getCoordinate(address: a, completionHandler: {coord , error in
            
            if error == nil {
            items.append(Location(coordinate: CLLocationCoordinate2D(latitude: coord.latitude, longitude: coord.longitude), address: a))
                print("resulting coordinate = (\(coord.latitude),\(coord.longitude))")
            
            } else {
                print(error as Any)
            }
            
        })
        
    }
        
}

總而言之,當我去調試這個問題時,調試器會到達代碼片段中的第 4 行,然后跳過函數的其余部分。 謝謝你的幫助!

這就是異步代碼的工作原理。 您進行調用,並將其傳遞給完成處理程序。 函數調用立即返回。 在未來的某個日期, aysnc 函數完成其工作,然后調用您的完成處理程序。

把它想象成讓你的孩子跑到商店買一些你完成晚餐所需的原料。 你把清單發給你的孩子,讓他們在路上,然后回去做剩下的晚餐。 當他們回來時,經過不可預知的延遲,他們告訴你他們有東西(調用你的完成處理程序),然后你拿走他們給你的項目(你的完成處理程序可以從異步函數中獲取參數。)

如果您在完成處理程序中、在函數調用中以及在函數調用之后設置斷點,您將看到調試器首先命中函數調用,然后是函數調用后斷點,然后在以后的某個時間將看到它擊中完成處理程序代碼的斷點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM