Я пробую 2-й уровень массива в объекте-массиве NSDictionary
, но он возвращает nil
Сначала я определил NSDictionary
, а затем получил доступ к 1-му уровню массива, и теперь все хорошо.
let dict = JSON(responseObject as! NSDictionary)
let arrayData = dict["data"].arrayObject! as NSArray
print("arrayData", arrayData)
При печати arrayData
я получаю следующее возвращение
data = (
{
categories = (
{
categories = "<null>";
"category_id" = 333;
image = "https://www.example.com/images/1.jpg";
name = "Sub Category One";
"parent_id" = 1000;
},
{
categories = "<null>";
"category_id" = 444;
image = "https://www.example.com/images/2.jpg";
name = "Sub Category Two";
"parent_id" = 1000;
},
{
categories = "<null>";
"category_id" = 555;
image = "https://www.example.com/images/3.jpg";
name = "Sub Category Three";
"parent_id" = 1000;
}
);//end of categories array
"category_id" = 1000;
image = "https://www.examples.com/images/category.jpg";
name = "Parent Category";
"parent_id" = 0;
},
)
Теперь я пытаюсь получить доступ и напечатать categories
из указанного выше возвращенного массива
Итак, я попробовал следующее:
if dict["categories"].arrayObject != nil{
let arrayData2 = dict["categories"].arrayObject! as NSArray
print("arrayData2", arrayData2)
}
Я также попробовал это как
if dict["data"]["categories"].arrayObject != nil{
let arrayData2 = dict["data"]["categories"].arrayObject! as NSArray
print("arrayData2", arrayData2)
}
В обоих случаях я получаю значение nil , в то время как оно должно получитьреальные значения.
РЕДАКТИРОВАНИЕ: добавлен вызов API в ViewController и структура dataModel
Функция CallHTTPAPI в View Controller
func callingHttppApi(){
DispatchQueue.main.async{
NetworkManager.sharedInstance.showLoader()
let sessionId = self.defaults.object(forKey:"token");
self.categoriesTableView.isUserInteractionEnabled = false
var requstParams = [String:Any]();
requstParams["token"] = sessionId
NetworkManager.sharedInstance.callingHttpRequest(params:requstParams, apiname:"api/cat", cuurentView: self){success,responseObject in
if success == 1{
let dict = responseObject as! NSDictionary;
if dict.object(forKey: "fault") != nil{
let fault = dict.object(forKey: "fault") as! Bool;
if fault == true{
self.loginRequest()
}
}else{
NetworkManager.sharedInstance.dismissLoader()
self.view.isUserInteractionEnabled = true
self.categoriesTableView.isUserInteractionEnabled = true
let dict = JSON(responseObject as! NSDictionary)
let arrayData = dict["data"].arrayObject! as NSArray
if dict["categories"].arrayObject != nil{
let arrayData2 = dict["categories"].arrayObject! as NSArray
print("arrayData2", arrayData2)
}
print("arrayData", arrayData)
if dict["error"].intValue == 1{
NetworkManager.sharedInstance.showErrorMessageWithBack(view: self, message: NetworkManager.sharedInstance.language(key: "error"))
}else{
self.categoriesCollModel = CategoriesViewModel(data:JSON(responseObject as! NSDictionary))
dump (self.categoriesCollModel)
}
}
}else if success == 2{
NetworkManager.sharedInstance.dismissLoader()
self.callingHttppApi()
}
}
}
}
Модель данныхструктура для приведения значений
//
// CategoriesViewModel.swift
//
import Foundation
class Categories: NSObject{
var id:String = ""
var name:String = ""
var image:String = ""
init(data:JSON){
self.id = data["category_id"].stringValue
self.name = data["name"].stringValue
self.image = data["image"].stringValue
}
}
class SubCategories:NSObject{
var pid:String = ""
var id:String = ""
var name:String = ""
var image:String = ""
init(data:JSON) {
self.pid = data["parent_id"].stringValue
self.id = data["category_id"].stringValue
self.name = data["name"].stringValue
self.image = data["image"].stringValue
}
}
struct Categories_Data{
var id:String = ""
var categoriesArray = [SubCategories]()
init(data:JSON) {
self.id = data["category_id"].stringValue
if let arrayData = data["data"]["categories"].arrayObject {
categoriesArray = arrayData.map({(value) -> SubCategories in
return SubCategories(data:JSON(value))
})
}
}
}
class CategoriesViewModel:NSObject{
var categoryModel = [Categories]()
var subCategories = [SubCategories]()
var categories_Data = [Categories_Data]()
init(data:JSON) {
let arrayData = data["data"].arrayObject! as NSArray
categoryModel = arrayData.map({(value) -> Categories in
return Categories(data:JSON(value))
})
if data["data"]["categories"].arrayObject != nil{
let arrayData2 = data["data"]["categories"].arrayObject! as NSArray
categories_Data = arrayData2.map({(value) -> Categories_Data in
return Categories_Data(data:JSON(value))
})
}
//categoryModel = Categories(data:data)
}
var getCategories:Array<Categories>{
return categoryModel
}
var getSubCategories:Array<SubCategories>{
return subCategories
}
}