title: How to decode a JSON array using Decodable?
body: <p>I am requesting the API to send me some data which I can successfully retrieve yet I am stuck in the decoding process of it . 
  here is the JSON I receive :  </p>
  
  <pre><code>[  
     {  
        "challenge_id":1,
        "challenge_title":"newchallenge1",
        "challenge_pts_earned":1000,
        "challenge_description":"description1",
        "start_date":"2017-09-24T00:00:00.000Z",
        "end_date":"2017-09-24T00:00:00.000Z",
        "challenge_category_id":1,
        "status_id":2,
        "createdAt":"2017-09-24T17:21:47.000Z",
        "updatedAt":"2017-09-24T09:40:34.000Z"
     },
     {  
        "challenge_id":2,
        "challenge_title":"challenge1",
        "challenge_pts_earned":100,
        "challenge_description":"description1",
        "start_date":"2017-09-24T00:00:00.000Z",
        "end_date":"2017-09-24T00:00:00.000Z",
        "challenge_category_id":1,
        "status_id":0,
        "createdAt":"2017-09-24T17:22:12.000Z",
        "updatedAt":"2017-09-24T09:22:12.000Z"
     },
     {  
        "challenge_id":3,
        "challenge_title":"new eat title",
        "challenge_pts_earned":600000,
        "challenge_description":"haha",
        "start_date":"2017-01-09T00:00:00.000Z",
        "end_date":"2017-01-10T00:00:00.000Z",
        "challenge_category_id":2,
        "status_id":0,
        "createdAt":"2017-09-27T17:12:10.000Z",
        "updatedAt":"2017-09-27T09:15:19.000Z"
     }
  ]
  </code></pre>
  
  <p>and I am trying to create the following structure to decode it : </p>
  
  <pre><code>   struct challenge : Codable {
      let  id : String?
      let  title : String?
      let  pointsEarned : String?
      let  description : String?
      let  dayStarted : String?
      let  dayEnded : String?
      let  categoryID : String?
      let  statusID : Int?
      let createdAt : Date?
      let updatedAt : Date?
  
      enum CodingKeys: String, CodingKey {
          case id = "challenge_id"
          case title = "challenge_title"
          case pointsEarned = "challenge_pts_earned"
          case description = "challenge_description"
          case dayStarted = "start_date"
          case dayEnded = "end_date"
          case categoryID = "challenge_category_id"
          case statusID = "status_id"
          case createdAt, updatedAt
      }
  
  }
  </code></pre>
  
  <p>And here is my code for the implementation : </p>
  
  <pre><code> var All_challenges : [challenge]?
   let url = URL(string: API.all_challenges.rawValue)!
          var request = URLRequest(url: url)
          request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
          request.httpMethod = "GET"
          let task = URLSession.shared.dataTask(with: request) { data, response, error in
              guard let data = data, error == nil else {
                  print("error=\(String(describing: error))")
                  return
              }
              if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {
                  print("statusCode should be 200, but is \(httpStatus.statusCode)")
                  print("\(String(describing: response))")
              }
              let responseString = String(data: data, encoding: .utf8)
              guard let result = responseString else { return }
              print(result)
             if let json = try? JSONDecoder().decode([challenge].self , from : data ) {
                  self.All_challenges = json
  
             }
  
           }
          task.resume()
  </code></pre>
  
  <p>yet when I try to debug it I can never enter the if statement for </p>
  
  <pre><code>if let json = try? JSONDecoder().decode([challenge].self,from:data ) {
  self.All_challenges = json
  
   }
  </code></pre>
  
  <p>Please give me some description on where my mistake is , I am very new to JSON paring </p>