Once I get the JSON back from my http request through Alamofire, I get the following swiftyjson JSON object mentioned at the bottom of this post.
How can I extract the sections in this format?
And then how can I extract each array of object under each letter?
All of that using swift.
The objective is to create a list of contacts with a tableview and alphabetical sections.
Please let me know if I'm not clear.
JSON object:
{
"T" : [
{
"location" : "Shanghai",
"firstName" : "User3",
"id" : 3,
"created_at" : "2016-04-19 12:54:23",
"birthDate" : "2016-04-17",
"email" : "user3@test.com",
"profilePhotoPath" : "photos\/emptyProfilePhoto.jpg",
"updated_at" : "2016-04-19 12:54:23",
"lastName" : "Test"
}
],
"G" : [
{
"location" : "Jakaylaborough",
"firstName" : "Lambert",
"id" : 4,
"created_at" : "2016-04-19 23:25:39",
"birthDate" : "0000-00-00",
"email" : "user4@test.com",
"profilePhotoPath" : "photos\/emptyProfilePhoto.jpg",
"updated_at" : "2016-04-19 23:25:39",
"lastName" : "Gulgowski"
}
],
"W" : [
{
"location" : "East Sydni",
"firstName" : "Jedediah",
"id" : 5,
"created_at" : "2016-04-19 23:25:39",
"birthDate" : "0000-00-00",
"email" : "user5@test.com",
"profilePhotoPath" : "photos\/emptyProfilePhoto.jpg",
"updated_at" : "2016-04-19 23:25:39",
"lastName" : "Wehner"
},
{
"location" : "East Rebeccaton",
"firstName" : "Addison",
"id" : 6,
"created_at" : "2016-04-19 23:25:39",
"birthDate" : "0000-00-00",
"email" : "user6@test.com",
"profilePhotoPath" : "photos\/emptyProfilePhoto.jpg",
"updated_at" : "2016-04-19 23:25:39",
"lastName" : "Weimann"
}
]
}
答案 0 :(得分:0)
刚刚找到我的路。回答如下。
var sections : [(index: Int, length :Int, title: String)] = Array()
var contactsSorted: [JSON] = [JSON]()
// Delegate from my contact protocol
func didReceiveContacts(contacts: JSON){
var index = 0
for (key,subJson):(String, JSON) in contacts {
let title = "\(key)"
let newSection = (index: index, length: subJson.count, title: title)
sections.append(newSection)
contactsSorted.append(subJson)
index += 1
}
// EDIT:Sort the sections by title to retrieve the alphabetical order
sections.sortInPlace({ $0.title < $1.title })
self.tableView.reloadData()
}
// tableView delegate methods
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return sections.count
}
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return sections[section].title
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sections[section].length
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("contactCell")! as! ContactTableViewCell
cell.nameLabel.text = contactsSorted[sections[indexPath.section].index].array![indexPath.row]["firstName"].string! + " " + contactsSorted[sections[indexPath.section].index].array![indexPath.row]["lastName"].string!
}