2016-10-12 6 views
5

aufrufen Ich bin Anfänger in iOS. Ich habe im Internet gesucht und konnte keine Antwort finden, die mein Problem lösen würde. Stuck und habe keine Ahnung, was zu tun ist und wie man nach Lösung sucht.Swift 3: Kann DataTask nicht mit einer Argumentliste vom Typ Fehler

Ich folge dem Tutorial, das auf Swift 2 basiert. Die folgende Methode zeigt Fehler.

func downloadBooks(bookTitle: String) { 
    let stringURL = "GET https://www.googleapis.com/books/v1/volumes?q=\(bookTitle)" 

    guard let URL = URL(string: stringURL) else { 
     print("url problems") 
     return 
    } 

    let urlRequest = NSMutableURLRequest(url: URL) 
    let session = URLSession.shared 

    let task = session.dataTask(with: urlRequest) { (data: Data?, response: URLResponse?, error: Error?) in 

    } 

    task.resume() 
} 

Ich habe alle von Xcode vorgeschlagenen Anpassungen vorgenommen, aber keine weiteren Hinweise.

Außerdem ursprünglichen Teil des Codes von Tutorial wie das war:

guard let URL = NSURL(string: stringURL) else { 
    print("url problems") 
    return 
} 

Dann schlug Xcode as URL wie unten hinzufügen:

let urlRequest = NSMutableURLRequest(url: URL as URL) 

Beide Versionen zeigen kein Fehler. Was ist der Unterschied? Welchen sollte ich benutzen?

Ich würde wirklich jede Hilfe schätzen!

+0

Sie don brauche nicht das 'GET' am Anfang der URL. –

+0

@AndyIbanez wirklich? Aber es wurde aus dem Tutorial übernommen. Dann ist der Autor falsch? – Marat

+0

Wenn Ihre URL Null wird, dann ja. Datentasks sind implizit zu bekommen. –

Antwort

11

In Swift 3 die Compiler will nativer URLRequest

let urlRequest = URLRequest(url: url) // use a lowercase variable name, URL is a native struct in Swift 3 

Aber mit Ihrer speziellen Syntax, die Sie brauchen nicht einmal die Anfrage

let task = session.dataTask(with: url) { (data: Data?, response: URLResponse?, error: Error?) in ... 

noch die Anmerkungen

let task = session.dataTask(with: url) { (data, response, error) in ... 
+0

Sie haben beide Ihre Lösungen getestet und alle funktionieren. Was ist der Unterschied? Welchen sollte ich verlassen? – Marat

+1

Die Anforderung wird für GET-Tasks nicht benötigt. Sie benötigen es für POST-Aufgaben, die Header und die POST-Daten übergeben. Also die Anfrage weglassen. – vadian

+0

Jetzt verstehe ich es. Vielen Dank! – Marat

Verwandte Themen