Я также написал небольшую библиотеку, которая специализирована для отображения ответа json в структуру объекта. Я внутренне использую библиотеку json-swift от Дэвида Оуэнса. Возможно, это полезно для кого-то другого.
https://github.com/prine/ROJSONParser
Пример Employees.json
{
"employees": [
{
"firstName": "John",
"lastName": "Doe",
"age": 26
},
{
"firstName": "Anna",
"lastName": "Smith",
"age": 30
},
{
"firstName": "Peter",
"lastName": "Jones",
"age": 45
}]
}
В качестве следующего шага вам необходимо создать свою модель данных (EmplyoeeContainer и Employee).
Employee.swift
class Employee : ROJSONObject {
required init() {
super.init();
}
required init(jsonData:AnyObject) {
super.init(jsonData: jsonData)
}
var firstname:String {
return Value.get(self, key: "firstName")
}
var lastname:String {
return Value.get(self, key: "lastName")
}
var age:Int {
return Value.get(self, key: "age")
}
}
EmployeeContainer.swift
class EmployeeContainer : ROJSONObject {
required init() {
super.init();
}
required init(jsonData:AnyObject) {
super.init(jsonData: jsonData)
}
lazy var employees:[Employee] = {
return Value<[Employee]>.getArray(self, key: "employees") as [Employee]
}()
}
Затем, чтобы на самом деле отобразить объекты из ответа JSON, вам нужно передать данные в класс EmployeeContainer в качестве параметра в конструкторе , Он автоматически создает вашу модель данных.
var baseWebservice:BaseWebservice = BaseWebservice();
var urlToJSON = "http://prine.ch/employees.json"
var callbackJSON = {(status:Int, employeeContainer:EmployeeContainer) -> () in
for employee in employeeContainer.employees {
println("Firstname: \(employee.firstname) Lastname: \(employee.lastname) age: \(employee.age)")
}
}
baseWebservice.get(urlToJSON, callback:callbackJSON)
Выход консоли выглядит следующим образом:
Firstname: John Lastname: Doe age: 26
Firstname: Anna Lastname: Smith age: 30
Firstname: Peter Lastname: Jones age: 45