2015-03-05 1 views
0

J'apprends à faire un appel réseau de base, et à la suite d'un tutoriel. Le tutoriel passe par la simultanéité et le téléchargement des données JSON dans le thread d'arrière-plan. Je me demandais pourquoi dans la méthode sharedSession.downloadTaskWithURL le queryURL serait passé en tant qu'objet NSURL par opposition à l'URL de base. J'ai l'impression qu'il me manque quelque chose de plutôt évident!NSURLSessionDownloadTask Appeler clarification d'appel sur la syntaxe dans Swift

func searchRecipeData() { 

    let baseURL = NSURL(string: "http://api.recipes.com/v1/api/recipes?_app_id=\(apiID)&_app_key=\(apiKey)") 
    let queryURL = NSURL(string: "&q=onion+soup", relativeToURL: baseURL)! 

    let sharedSession = NSURLSession.sharedSession() 

    let downloadData: NSURLSessionDownloadTask = sharedSession.downloadTaskWithURL(queryURL, completionHandler: { (location: NSURL!, response: NSURLResponse!, error: NSError!) -> Void in 

     if (error == nil) { 

      let data = NSData(contentsOfURL: baseURL!) 

      println(data) 

     } 
    }) 
    // Resumes it even though it hasn't started yet 
    downloadData.resume() 

} 

Répondre

1

Jetez un oeil au deuxième paramètre où vous créez queryURL. Vous passez la constante baseURL. Ce qui se passe, c'est que le paramètre de requête '& q = oignon + soupe' est dit être relatif à la baseURL. La constante queryURL est l'URL complète, puis elle est transmise à downloadTaskWithURL.