0

I have a model Class, where I need to append values from JSON, I'm using Alamofire

I have tried the below method, but the values are not added properly.

Here is the Model Class

class ImageMJ {
var assignment__assignment_name:String?
var assignment__file_up:String?

init(assignment__assignment_name: String?, assignment__file_up: String?) {
    self.assignment__assignment_name = assignment__assignment_name
    self.assignment__file_up = assignment__file_up
  }
}

And the fun which I used

var imageDetailsArrayMJ = [ImageMJ]()

Alamofire.request(urls, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
        if((response.result.value) != nil) {
             let jsonVar = JSON(response.result.value!)
//                print(jsonVar)



            if let items = jsonVar["assisgnments"].array  {
                for item in items {

                    if let ids = item["assignment__assignment_name"].string {
                        print("IDS ==   \(ids)")
                        self.imageDetailsArrayMJ.append(ImageMJ(assignment__assignment_name: ids as! String, assignment__file_up: nil))

                    }

                    if let ifd = item["assignment__file_up"].string {
                        self.imageDetailsArrayMJ.append(ImageMJ(assignment__assignment_name: nil, assignment__file_up: ifd as! String))
                    }
                }


            }

My JSON is

{
"assisgnments": [
    {
        "assignment__file_up": "media/"
        "assignment__assignment_name": "MAX PAYNE",
    },
    {
        "assignment__file_up": "media/assignments/Calendar-master.zip",
        "assignment__assignment_name": "Doctor",
    },
    {
        "assignment__assignment_desc": "EA SPORTS FIFA 20",
        "assignment__file_up": "media/assignments/Screen_Shot_2019-07-08_at_10.38.49_AM.png",
    }
]}

I need like this assignment__assignment_name = "MAX PAYNE", assignment__file_up = "media/assignments/Calendar-master.zip"

Zouhair Sassi
  • 1,403
  • 1
  • 13
  • 30

1 Answers1

1

Rather than creating a new item for each dictionary value you have to create one item in each iteration.

As the properties are optional anyway you don't need the checks (nor the type casts)

 if let items = jsonVar["assisgnments"].array  {
    for item in items {

        let ids = item["assignment__assignment_name"].string 
        let ifd = item["assignment__file_up"].string
        self.imageDetailsArrayMJ.append(ImageMJ(assignment__assignment_name: ids, assignment__file_up: ifd))
    }
 }

You are encouraged to drop SwiftyJSON in favor of Codable and to get rid of those ugly objective-c-ish underscores.

vadian
  • 274,689
  • 30
  • 353
  • 361