DispatchQueue.main.async не имеет доступа к экранирующим параметрам замыканий? - PullRequest
0 голосов
/ 18 января 2019

Помогите мне разобраться, пожалуйста, у меня есть эта функция:

 func getUserDetailsRequestFor(userId: String, completion: @escaping([DataObject?]?, ApiError?, NSError?) -> () ) {
    let token = KeychainWrapper.standard.string(forKey: "token") ?? ""
    let headers = ["Content-Type": "application/json",
                   "Authorization": "Bearer " + token]

    let endPoint = networkManager.buildURLforEndpoint(endpoint: ApiEndPoints.getUserByID.rawValue.replacingOccurrences(of: "{id}", with: userId))
    let request = networkManager.buildURLRequest(withEndpoint: endPoint, andHttpMethod: "Get", andHeaders: headers, andJsonBody: nil)

    networkManager.dataTaskWith(with: request) { (apiData, error) in
        completion(apiData?.data, apiData?.error, error)
    }
}

То, что я называю так:

func getUserDetails() {
    NetworkRouter.shared.getUserDetailsRequestFor(userId: "3") { (apiData, apiError, error) in
       print("this line get executed first, and i have access to apiData, apiError, error")
        DispatchQueue.main.async {
           print("this line get executed second, and i  don't have access to apiData, apiError, error")
        }
    }
}

Я поместил операторы печати, чтобы проиллюстрировать мою точную проблему. Я не понимаю, почему у меня нет доступа к параметрам экранирующих замыканий во втором операторе печати.

...