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

iOS Build a Weather App with Swift Managing Complexity Methods with Closures

Building a wether app

I have a few questions, From my code bellow you can see something has changed in swift. before you was putting error alongside with data, options and what so ever. But now you do:

do { let variable = try // your code } catch let error { // Error message }

can you please explain why we doing this way?

and also and did not understand why we are putting "[]" instead of nil?

(data!, options: [] )

here is my code:

class NetworkOperation {

lazy var config: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
lazy var session: NSURLSession = NSURLSession(configuration: self.config)
let queryURL: NSURL

typealias JSONDictionaryCompletion = ([String: AnyObject]?) -> Void

init(url: NSURL) {
    self.queryURL = url
}

func downloadJSONFromURL(completion: JSONDictionaryCompletion) {

    let request: NSURLRequest = NSURLRequest(URL: queryURL)
    let dataTask = session.dataTaskWithRequest(request) {
        (let data, let response, let error) in

        // 1. Check HTTP response for successful GET request

        if let httpResponse = response as? NSHTTPURLResponse {

            switch(httpResponse.statusCode) {
            case 200:
                // 2. Create JSON object with data
                do {
                    let jsonDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as! [String: AnyObject]
                    completion(jsonDictionary)
                } catch let error {
                    print("JSON Serialization failed. Error: \(error)")
                }
            default:
                print("GET request not successful. HTTP status code: \(httpResponse.statusCode)")
            }

        } else {
            print("Error: Not a valid HTTP response")
        }
    }
}

}

3 Answers

Carson Carbery
Carson Carbery
9,876 Points

Hi Meera,

I can answer your question about the Do and Catch coding. These are changes made for error handling in Swift 2. There is a course called error handling in Swift 2, where these constructs are described. The build a weather app course was made in Swift 1. Hope this helps. Carson

I get everything except this "[]", can u please explain what does it do ? why we type it instead of nil?

Carson Carbery
Carson Carbery
9,876 Points

Hi Henry,

Yes the options can contain several values in an Array for example: NSJSONSerialization.JSONObjectWithData(data, options: [.MutableContainers, .MutableLeaves])

So to specify no options = an empty array []. Hope that clears it up for you.

Thanks)