Bonjour, j'ai un code d'analyse json fonctionnel pour swift2.2 mais lorsque je l'utilise pour Swift 3.0, cela me donne cette erreur
ViewController.swift: 132: 31: Référence ambiguë au membre 'dataTask (with: completionHandler :)'
Mes codes ici
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()
Merci pour les idées.
dataTask(with:
par exemple que j'avaisurl = "www.yahoo.com
et je la passais directement dans la fonction sans la convertir en unURL
Réponses:
Le compilateur est confus par la signature de la fonction. Vous pouvez le réparer comme ceci:
Mais notez que nous n'avons pas besoin de lancer "request" comme
URLRequest
dans cette signature si elle a été déclarée plus tôt commeURLRequest
au lieu deNSMutableURLRequest
:C'est le casting automatique entre
NSMutableURLRequest
et le nouveauURLRequest
qui échoue et qui nous a obligés à faire ce casting ici.la source
var request = URLRequest(url:myUrl!)
URL(string:)
constructeur peut-il jamais échouer?Vous avez initié
myRequest
commeNSMutableURLRequest
, vous en avez besoin:Swift abandonne à la fois la
NSMutable...
chose. Utilisez simplementvar
pour les nouvelles classes.la source
Xcode 8 et Swift 3.0
Utilisation d'URLSession:
Appel du délégué URLSession:
Utilisation du bloc GET / POST / PUT / DELETE:
Fonctionne bien pour moi .. essayez-le 100% de garantie de résultat
la source
Ce problème est causé par URLSession a deux méthodes dataTask
Le premier a
URLRequest
comme paramètre, et le second aURL
comme paramètre, nous devons donc spécifier le type à appeler, par exemple, je veux appeler la deuxième méthodela source
Dans mon cas, l'erreur était dans NSURL
Dans Swift 3, vous devez écrire uniquement une URL :
la source
Testé la version stable de xcode 8; Besoin d'utiliser la
var request
variable avecURLRequest()
Avec des thats vous pouvez facilement corriger cela ( bug )var request = URLRequest(url:myUrl!)
EtA bien fonctionné! Merci les gars, je pense aider beaucoup de gens. !
la source
var request = URLRequest(url: url); let task = URLSession.shared().dataTask(with: request) { ... }
shared
est une propriété plutôt qu'une fonction dans Swift 3 (pas de parenthèses).Pour Swift 3 et Xcode 8:
// Remarque: vous pouvez toujours utiliser le débogueur pour vérifier l'erreur
la source
Dans swift 3, le compilateur est confondu par la signature de la fonction. Le spécifier effacera l'erreur. Convertissez également la chaîne d'URL en type URL. Le code suivant a fonctionné pour moi.
la source
Réponse courte et concise pour Swift 3:
la source
la source
Pour charger des données via une requête GET, vous n'en avez pas besoin
URLRequest
(et pas de point-virgule)la source
la source
Xcode 10.1 Swift 4
Cela a fonctionné pour moi:
La clé ajoutait dans la
URLSessionDataTask
déclaration de type.la source
Pour moi je fais ça pour trouver,
Je ne peux pas utiliser
la source