Search code examples
iosswiftalamofire

How to append values to Model Class


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"


Solution

  • 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.