Hallo, ich habe JSON-Parsing-Code für swift2.2, aber wenn ich ihn für Swift 3.0 verwende, erhalte ich diesen Fehler
ViewController.swift: 132: 31: Mehrdeutiger Verweis auf Mitglied 'dataTask (mit: CompletionHandler :)'
Meine Codes hier
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()
Danke für Ideen.
dataTask(with:
z. B. übergeben habeurl = "www.yahoo.com
und sie direkt in die Funktion übergeben habe, ohne sie in eineURL
Antworten:
Der Compiler ist durch die Funktionssignatur verwirrt. Sie können es so beheben:
Beachten Sie jedoch, dass wir "Anfrage" nicht wie
URLRequest
in dieser Signatur setzen müssen, wenn sie früher alsURLRequest
statt deklariert wurdeNSMutableURLRequest
:Dies ist das automatische Casting zwischen
NSMutableURLRequest
und dem neuenURLRequest
, das fehlschlägt und das uns gezwungen hat, dieses Casting hier durchzuführen.quelle
var request = URLRequest(url:myUrl!)
URL(string:)
Konstruktor jemals versagen?Sie haben
myRequest
als initiiertNSMutableURLRequest
, Sie brauchen dies:Swift lässt beides fallen
NSMutable...
. Verwenden Sie einfachvar
für die neuen Klassen.quelle
Xcode 8 und Swift 3.0
Verwenden von URLSession:
URLSession Delegate-Aufruf:
Verwenden des Blocks GET / POST / PUT / DELETE:
Funktioniert gut für mich .. versuchen Sie es 100% Ergebnisgarantie
quelle
Dieses Problem wird dadurch verursacht, dass URLSession über zwei dataTask-Methoden verfügt
Der erste hat
URLRequest
als Parameter und der zweiteURL
als Parameter, daher müssen wir angeben, welcher Typ aufgerufen werden soll, zum Beispiel möchte ich die zweite Methode aufrufenquelle
In meinem Fall war der Fehler in NSURL
In Swift 3 müssen Sie nur die URL schreiben :
quelle
Getestete stabile Version von xcode 8; Notwendigkeit zu verwenden
var request
Variable mitURLRequest()
Mit dem ist man leicht , dass ( beheben Fehler )var request = URLRequest(url:myUrl!)
UndHat gut funktioniert! Vielen Dank, ich denke, helfen Sie vielen Menschen. !
quelle
var request = URLRequest(url: url); let task = URLSession.shared().dataTask(with: request) { ... }
shared
ist in Swift 3 eher eine Eigenschaft als eine Funktion (keine Klammern).Für Swift 3 und Xcode 8:
// Hinweis: Sie können den Debugger immer verwenden, um Fehler zu überprüfen
quelle
In Swift 3 wird der Compiler durch die Funktionssignatur verwirrt. Wenn Sie es angeben, wird der Fehler behoben. Konvertieren Sie auch die URL-Zeichenfolge in den Typ URL. Der folgende Code hat bei mir funktioniert.
quelle
Kurze und prägnante Antwort für Swift 3:
quelle
quelle
Um Daten über eine GET-Anfrage zu laden, benötigen Sie keine
URLRequest
(und keine Semikolons).quelle
quelle
Xcode 10.1 Swift 4
Das hat bei mir funktioniert:
Der Schlüssel wurde in der
URLSessionDataTask
Typdeklaration hinzugefügt .quelle
Für mich mache ich das, um zu finden,
Kann nicht verwenden
quelle