Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trial
Mathieu Delarue
5,633 PointsConcurrency
Here is my code:
// // ViewController.swift // Stormy // // Created by Mathieu Delarue on 3/24/15. // Copyright (c) 2015 Mordel. All rights reserved. //
import UIKit
class ViewController: UIViewController {
//Replace the string below with your API Key.
private let apiKey = "4de5319c1c8991a1ff2985013795b0b3"
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let baseURL = NSURL(string: "https://api.forecast.io/forecast/\(apiKey)/")
let forecastURL = NSURL(string: "37.8267,-122.423", relativeToURL: baseURL)
let sharedSession = NSURLSession.sharedSession()
// Below is the error
let downloadTask: NSURLSessionDownloadTask = sharedSession.downloadTaskWithURL(forecastURL, completionHandler: { (location: NSURL!, response: NSURLResponse!, error: NSError!) -> Void in
if (error == nil) {
let dataObject = NSData(contentsOfURL: location)
let weatherDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(dataObject, options: nil, error: nil) as NSDictionary
println(weatherDictionary)
}
})
downloadTask.resume()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
at the let downloadTask there is an error that says that NSURL is not unwrapped. WHY???
1 Answer
Iulian Popescu
1,363 PointsApple documentation says that "An NSURL object initialized with URLString and baseURL. If URLString was malformed, returns nil." when the initializer is called, so the type of your forecastURL is NSURL? and the method downloadWithTask takes value of type NSURL. So this is why it have to be wrapped.