Здравствуйте, у меня есть рабочий код для разбора json для swift2.2, но когда я использую его для Swift 3.0, я получаю эту ошибку
ViewController.swift: 132: 31: неоднозначная ссылка на элемент 'dataTask (with: завершениемHandler :)'
Мои коды здесь
let listUrlString = "http://bla.com?batchSize=" + String(batchSize) + "&fromIndex=" + String(fromIndex)
let myUrl = URL(string: listUrlString);
let request = NSMutableURLRequest(url:myUrl!);
request.httpMethod = "GET";
let task = URLSession.shared().dataTask(with: request) {
data, response, error in
if error != nil {
print(error!.localizedDescription)
DispatchQueue.main.sync(execute: {
AWLoader.hide()
})
return
}
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSArray
if let parseJSON = json {
var items = self.categoryList
items.append(contentsOf: parseJSON as! [String])
if self.fromIndex < items.count {
self.categoryList = items
self.fromIndex = items.count
DispatchQueue.main.async(execute: {
self.categoriesTableView.reloadData()
AWLoader.hide()
})
}else if( self.fromIndex == items.count){
DispatchQueue.main.async(execute: {
AWLoader.hide()
})
}
}
} catch {
AWLoader.hide()
print(error)
}
}
task.resume()
Спасибо за идеи.
dataTask(with:
например, у меня,url = "www.yahoo.com
и я передавал ее прямо в функцию, не преобразовывая ее вURL
Ответы:
Компилятор смущен сигнатурой функции. Вы можете исправить это так:
Но обратите внимание, что нам не нужно приводить «запрос», как
URLRequest
в этой подписи, если он был объявлен ранееURLRequest
вместоNSMutableURLRequest
:Это автоматическое приведение между
NSMutableURLRequest
и новымURLRequest
, которое терпит неудачу и которое заставило нас сделать это здесь.источник
var request = URLRequest(url:myUrl!)
URL(string:)
конструктор когда-нибудь потерпеть неудачу?У вас есть init'd
myRequest
какNSMutableURLRequest
, вам нужно это:Свифт угробил обе
NSMutable...
вещи. Просто используйтеvar
для новых классов.источник
Xcode 8 и Swift 3.0
Использование URLSession:
URLSession Делегатский вызов:
Использование блока GET / POST / PUT / DELETE:
Работает нормально для меня .. попробуйте 100% гарантию результата
источник
Эта проблема вызвана тем, что URLSession имеет два метода dataTask
Первый из них имеет в
URLRequest
качестве параметра, а второй имеет вURL
качестве параметра, поэтому нам нужно указать, какой тип вызывать, например, я хочу вызвать второй методисточник
В моем случае ошибка была в NSURL
В Swift 3 вы должны написать только URL :
источник
Протестирована стабильная версия xcode 8; Нужно использовать
var request
переменную сURLRequest()
помощью То, что вы можете легко это исправить ( ошибка )var request = URLRequest(url:myUrl!)
ИРаботал нормально! Спасибо, ребята, я думаю, что помочь многим людям. !
источник
var request = URLRequest(url: url); let task = URLSession.shared().dataTask(with: request) { ... }
shared
это свойство, а не функция в Swift 3 (без скобок).Для Swift 3 и Xcode 8:
// Примечание: вы всегда можете использовать отладчик для проверки ошибки
источник
В swift 3 компилятор смущен сигнатурой функции. Указав это, вы очистите ошибку. Также преобразуйте строку URL в тип URL. Следующий код работал для меня.
источник
Краткий и краткий ответ для Swift 3:
источник
источник
Для загрузки данных через GET-запрос вам не нужны никакие
URLRequest
(и не точки с запятой)источник
источник
Xcode 10.1 Swift 4
Это сработало для меня:
Ключ был добавлен в
URLSessionDataTask
объявлении типа.источник
Для меня я делаю это, чтобы найти,
Не могу использовать
источник