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