Я пишу библиотеку, поэтому не использую UIKit, Даже в моем приложении iOS один и тот же код работает, но когда я выполняю в командной строке, это не так. В PlayGround тоже кажется работающим.Swift 3, URLSession dataTask completeHandler не вызван
По какой-то причине обратный вызов не запускается, поэтому заявления печати не выполняются.
internal class func post(request: URLRequest, responseCallback: @escaping (Bool, AnyObject?) ->()) {
execTask(request: request, taskCallback: { (status, resp) -> Void in
responseCallback(status, resp)
})
}
internal class func clientURLRequest(url: URL, path: String, method: RequestMethod.RawValue, params: Dictionary<String, Any>? = nil) -> URLRequest {
var request = URLRequest(url: url)
request.httpMethod = method
do {
let jsonData = try JSONSerialization.data(withJSONObject: (params! as [String : Any]), options: .prettyPrinted)
request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
request.httpBody = jsonData
} catch let error as NSError {
print(error)
}
return request
}
private class func execTask(request: URLRequest, taskCallback: @escaping (Bool,
AnyObject?) ->()) {
let session = URLSession(configuration: URLSessionConfiguration.default)
print("THIS LINE IS PRINTED")
let task = session.dataTask(with: request, completionHandler: {(data, response, error) -> Void in
if let data = data {
print("THIS ONE IS NOT PRINTED")
let json = try? JSONSerialization.jsonObject(with: data, options: [])
if let response = response as? HTTPURLResponse , 200...299 ~= response.statusCode {
taskCallback(true, json as AnyObject?)
} else {
taskCallback(false, json as AnyObject?)
}
}
})
task.resume()
}
редактирует - Я пишу библиотеку, поэтому не используется UIKit, даже в мое приложение IOS же код работает, но когда я выполнить в командной строке в не делает. В PlayGround тоже кажется работающим.
Но если 'Оба заявления печати в поле ниже код не executing', то это не связанно с обратным вызовом ... просто ваш метод dataTask никогда не вызывается. – Moritz
Пожалуйста, покажите нам, как вы называете свой частный метод dataTask. – Moritz
назвал его другим способом. создается переменная задача, затем она достигает resume(). но completeHandler не выполняется. Добавление другого кода в вопрос. – xrage