До сих пор мне приходилось иметь дело с простыми массивами JSON только с одним массивом. Я теперь объединен 2 массивов вместе, так что я могу получить мои пользовательские данные и все отзывы для этого пользователя:Доступ к массиву JSON внутри другого массива
[
{
"user_id": "16",
"name": "Jonh",
"lastName": "appleseed",
"username": "[email protected]",
"sex": "male",
"image_url": "",
"review": [
{
"reviewID": "4",
"merchant_id": "17",
"rating": "5",
"user_id": "16",
"comments": "Very good customer. Strongly suggested",
"date": "0000-00-00",
"reviewYear": "",
"publish": "1"
},
{
"reviewID": "8",
"merchant_id": "16",
"rating": "2",
"user_id": "16",
"comments": "Automatic review due to "NO SHOW" without informing the merchant",
"date": "0000-00-00",
"reviewYear": "",
"publish": "1"
}
]
}
]
, прежде чем я добавил обзоры моя модель выглядит следующим образом:
import Foundation
class Users {
let userImage:String?
let name:String?
let sex:String?
let image_url:String?
init(dictionary:NSDictionary) {
userImage = dictionary["userImage"] as? String
name = dictionary["name"] as? String
sex = dictionary["sex"] as? String
image_url = dictionary["image_url"] as? String
}
}
func loadUser(completion:(([Users])-> Void), userId: String){
let myUrl = NSURL(string: "http://www.myWebSite.com/api/v1.0/users.php")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
let postString = "user_id=\(userId)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
{ data, response, error in
if error != nil {
print("error\(error)")
} else {
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray
print(json)
var users = [Users]()
for user in json{
let user = Users(dictionary: user as! NSDictionary)
users.append(user)
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)){
dispatch_async(dispatch_get_main_queue()){
completion(users)
}
}
}
} catch{
}
}
}
task.resume()
}
, который я мог бы затем используется в моем ViewController:
func loadModel() {
let loadingNotification = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
loadingNotification.mode = MBProgressHUDMode.Indeterminate
loadingNotification.labelText = "updating your deals..."
users = [Users]()
let api = Api()
api.loadUser(didLoadUsers , userId: "16")
}
func didLoadUsers(users:[Users]){
self.users = users
self.tableView.reloadData()
MBProgressHUD.hideAllHUDsForView(self.view, animated: true)
}
могу ли я получить review
поле, так что я могу представить его в контроллере табличного?
Вы должны иметь возможность получить объект «обзор», так же, как вы получали строки, за исключением того, что это будет массив словарей (а не строка). Прокрутите массив «обзор» и сделайте все, что хотите, со словарем. – Putz1103