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
1 2 3 4 5 6 7 8 9 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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
1 2 3 4 5 6 7 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
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
1 2 3 4 5 6 |
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
1 2 3 4 5 |
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] |