Search code examples
objectpostparametersswift3alamofire

How to send total model object as a parameter of Alamofire post method in Swift3?


I have a model class like this

class Example() {
  var name:String?
  var age:String?
  var marks:String? 
}

I'm adding data to that model class

let example = Example()
example.name = "ABC"
example.age = "10"
example.marks = "10" 

After that I converted to JSON then I posted

Alamofire.request(URL, method:.post, parameters: example)

Alamofire not accepting parameters only its accepting like parameters = ["":"","",""]-->key value based, so I tried to convert model to JSON, JSON to dictionary, even though not accepting its showing like parameters problem. Exactly I need total model object need to send as a parameter of post method in Alamofire like this:

let example = Example()
Alamofire.request(URL, method:.post, parameters: example) 

Solution

  • Since the Alamofire API is only accepting dictionaries, create a dictionary yourself!

    Add a method in the model class called toJSON:

    func toJSON() -> [String: Any] {
        return [
            "name": name as Any,
            "age": age as Any,
            "marks": marks as Any
        ]
    }
    

    Then call this method when calling request:

    Alamofire.request(URL, 
        method:.put, 
        parameters:example.toJSON(), 
        encoding:JSONEncoding.default, 
        headers :Defines.Api.Headers )
    

    Alternatively, use SwiftyJSON:

    func toJSON() -> JSON {
        return [
            "name": name as Any,
            "age": age as Any,
            "marks": marks as Any
        ]
    }
    

    Usage:

    Alamofire.request(URL, 
        method:.put, 
        parameters:example.toJSON().dictionaryObject, 
        encoding:JSONEncoding.default, 
        headers :Defines.Api.Headers )