Swift 3 URLSession.partagé() référence Ambiguë à un membre " dataTask(avec:completionHandler:) erreur (bug)
Bonjour j'ai le travail json code d'analyse pour swift2.2, mais quand je l'utilise pour Swift 3.0 me donne cette erreur
ViewController.swift:132:31: référence Ambiguë à un membre " dataTask(avec: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.
- J'avais la même erreur parce que j'ai été en passant d'une chaîne à la
dataTask(with:
par exemple, j'ai euurl = "www.yahoo.com
et j'ai été en passant directement dans la fonction sans en la convertissant en uneURL
Vous devez vous connecter pour publier un commentaire.
Le compilateur est confondu par la signature de la fonction. Vous pouvez résoudre le problème comme ceci:
Mais sachez que nous n'avons pas à jeter "demande" que
URLRequest
dans cette signature si il a été déclaré plus tôt queURLRequest
au lieu deNSMutableURLRequest
:C'est le automatique de moulage entre
NSMutableURLRequest
et la nouvelleURLRequest
qui est un échec et qui nous a forcé à faire ce casting ici.var request = URLRequest(url:myUrl!)
URL(string:)
constructeur jamais échouer?Vous avez init avais
myRequest
commeNSMutableURLRequest
, vous avez besoin de ceci:Swift est l'amerrissage forcé la fois la
NSMutable...
chose. Utilisez simplementvar
pour les nouvelles classes.Xcode 8 et Swift 3.0
À L'Aide De URLSession:
URLSession de Déléguer l'appel:
L'aide du Bloc GET/POST/PUT/DELETE:
Fonctionne très bien pour moi.. essayez résultat de 100% de garantie
Ce problème est provoqué par URLSession a deux dataTask méthodes
Le premier a
URLRequest
comme paramètre, et la seconde aURL
comme paramètre, nous avons donc besoin de spécifier le type d'appel, par exemple, je tiens à appeler la deuxième méthodeDans mon cas, l'erreur était dans NSURL
Dans Swift 3 vous devez écrire juste URL:
Testé xcode 8 version stable ; Besoin d'utiliser
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. !
var request = URLRequest(url: url); let task = URLSession.shared().dataTask(with: request) { ... }
shared
est une propriété plutôt qu'une fonction de 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
Dans swift 3 le compilateur est confondu par la signature de la fonction. En précisant qu'il va effacer l'erreur. Aussi convertir la chaîne d'url de type URL. Le code suivant a travaillé pour moi.
Court et concis réponse rapide 3:
Pour charger des données via une requête GET vous n'avez pas besoin de tout
URLRequest
(et non des points-virgules)Xcode 10.1 Swift 4
Cela a fonctionné pour moi:
La clé a été l'ajout dans le
URLSessionDataTask
déclaration de type.Pour moi, je le fais pour trouver,
Ne pouvez pas utiliser