Я новичок в Swift и JSON, поэтому, пожалуйста, медведь со мной, если это глупо. Я пытаюсь разобрать этот JSON http://jsonplaceholder.typicode.com/users в быстром. Я могу получить значения одного пользователя, набрав http://jsonplaceholder.typicode.com/users/1, но проблема в том, что он дает мне только значения для одного пользователя за раз. Я ищу способ получить значения всех пользователей за один раз.как разобрать этот json в swift
Я использую API SwiftyJSON.
Это код, который я использую:
// RestApiManager.swift
import Foundation
typealias ServiceResponse = (JSON, NSError?) -> Void
class RestApiManager: NSObject{
static let sharedInstance = RestApiManager()
let baseURL = "http://jsonplaceholder.typicode.com/users/"
func getUser(onCompletion: (JSON) ->Void){
makeHTTPGetRequest(baseURL, onCompletion: {json, err -> Void in onCompletion(json)})
}
func makeHTTPGetRequest(path: String, onCompletion: ServiceResponse){
let request = NSMutableURLRequest(URL: NSURL(string: path)!)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request, completionHandler: { data, response, error in
let json:JSON = JSON(data: data)
onCompletion(json, error)
})
task.resume()
}
}
Это мой MasterViewController.swift класс
//
// MasterViewController.swift
//
//
import UIKit
class MasterViewController: UITableViewController {
var objects = [AnyObject]()
var contactsData = NSMutableArray() //array that will hold all the contact details.
override func awakeFromNib() {
super.awakeFromNib()
}
override func viewDidLoad() {
super.viewDidLoad()
getContactListJSON()
}
func getContactListJSON(){
RestApiManager.sharedInstance.getUser { json -> Void in
let user: AnyObject = json["id"].object
self.contactsData.addObject(user)
println(self.contactsData)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table View
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return contactsData.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("CELL", forIndexPath: indexPath) as? UITableViewCell
return cell
}
}
PS, если «id» всегда является int, вы также можете сделать: let id = contacts ["id"]. IntValue – user1700737
Большое спасибо! Он работает отлично! Еще один вопрос в моем сознании, что произойдет, если let id равен нулю? –
Привет. Тогда значение будет равно нулю. Вы действительно должны сделать что-то вроде этого: var id: String? if let id = contacts ["id"]. stringValue {// делать что-то с id} else {делать что-то еще или ничего}. Если вы считаете, что ответ правильный, pls отметьте мой пост как ответ и проголосуйте за него. Большое спасибо – user1700737