Ahmad Naser Turnkey Ecosystem Ahmad Naser
October 17, 2019

SwiftyJSON SwiftyUserDefaults Alamofire How to request and parse response

Published in the Ahmad Naser ecosystem. Estimated reading time: 2 minutes.

Using different libraries in swift might be tricky, but here we combined a complete example for you SwiftyJSON SwiftyUserDefaults Alamofire How to request and parse request

1- create a model

class Package : NSObject, NSCoding, Mappable, DefaultsSerializable{

    var name: String?
    var desc: String?
    var cost: Int?
    var credit: Int?
    var days: Int?

}

2- create a model init

    var _description: String {
        return "<name=\(name!)"
            + ", desc=\(desc!)"
            + ", cost=\(cost!)"
            + ", credit=\(credit!)"
            + ", days=\(days!)"
    }


    init(json: JSON) {

        
        self.name = json["name"].string ?? ""
        self.desc = json["desc"].string ?? ""
        self.cost = json["cost"].int
        self.credit = json["credit"].int
        self.days = json["days"].int

}

3- create a parse model method

   fileprivate func parse(packagesJSON: JSON) -> [Package] {
        var packages = [Package]()
        for (key: _, packageJSON: JSON) in packagesJSON {
            packages.append(Package(json: JSON))
        }
        return packages
    }

4- call and parse the json

        let headers: HTTPHeaders = [
         GlobalConstants.ApiKey: GlobalConstants.ApiKeyValue,
          "Accept": "application/json"
        ]
        
        Alamofire.request("https://example.com/configurations", parameters: ["show":"countries"], headers: headers)
                      .validate(statusCode: 200..<300)
                      .validate(contentType: ["application/json"])
                      .responseJSON { response in
                          print("Request: \(String(describing: response.request))")   // original url request
                          print("Response: \(String(describing: response.response))") // http url response
                          print("Result: \(response.result)")                         // response serialization result

                          if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
                             // print("Data: \(utf8Text)") // original server data as UTF8 string
                              do{
                                   // Get json data
                                  let json = try JSON(data: data)
                                //packages
                                
                          
                                 let packages = self.parse(packagesJSON: json["packages"])
                                for p in packages {
                                    print(p._description)
                                }
                                
                                /*
                                // Loop sub-json array
                                for (_, subJson) in json["packages"] {
                                // Display country name
                                    var pk:Package = Package()
                                       if let name = subJson["name"].string {
                                                                print("name: \(name)");
                                                                  }
                                    if let description = subJson["description"].string {
                                                                print("description: \(description)")
                                                                  }
                                    if let cost = subJson["cost"].int {
                                                                print("cost: \(cost)")
                                                                  }
                                    if let credit = subJson["credit"].int {
                                                                print("credit: \(credit)")
                                                                  }
                                    if let days = subJson["days"].int {
                                                                print("days: \(days)")
                                                                  }
                                    pk.name = name
                                    pk.description = description
                                    pk.cost = cost
                                    pk.credit = credit
                                    pk.days = days
                                    
                                    
                                 }*/
                                
                           
                             }catch{
                                  print("Unexpected error: \(error).")
                              }
                          }
                  }

5- you might use these packages inside the Swifty User Default

                          
                                 let _packages = self.parse(packagesJSON: json["packages"])
                                 let packages = DefaultsKey<[Package]?>("packages")
                                 Defaults[key: packages] = _packages
                                for p in Defaults[key: packages]! {
                                    print(p._description)
                                }

6-more examples

        
        let package = DefaultsKey<Package?>("package")
        let packages = DefaultsKey<[Package]?>("packages")
        let colorKey = DefaultsKey<String>("color", defaultValue: "")
        Defaults[key: colorKey] = "red"
       let x = Defaults[key: colorKey]

Leave a Reply

Your email address will not be published. Required fields are marked *