Обработка JSON с Alamofire & SwiftyJSON и добавление в UITableView в Swift - PullRequest
0 голосов
/ 12 ноября 2018

Я хочу использовать Alamofire и SwiftyJSON для моего REST API. Я получил доступ к корневому JSON, но не могу получить доступ к объектам JSON.

Это мой JSON-результат:

[
    {
        "ID": 1,
        "name": "JABODETABEK",
        "cabang": [
            {
                "ID": 1,
                "wilayah_id": 1,
                "name": "Jembatan Lima"
            },
            {
                "ID": 2,
                "wilayah_id": 1,
                "name": "Kebon Jeruk"
            }
        ]
    },
    {
        "ID": 2,
        "name": "Sumatra Selatan dan Bangka Belitung",
        "cabang": [
            {
                "ID": 6,
                "wilayah_id": 2,
                "name": "A. Yani - Palembang"
            },
            {
                "ID": 7,
                "wilayah_id": 2,
                "name": "Veteran - Palembang"
            }
          ]
       }
    }

С этим кодом:

Alamofire.request(url).responseJSON { (responseData) -> Void in
    if((responseData.result.value) != nil) {
        let swiftyJsonVar = JSON(responseData.result.value!)

        if let resData = swiftyJsonVar.arrayObject {
            self.productArray = resData as! [[String:AnyObject]]
            print("MyArray: \(self.productArray)")
        }
    }
}

Моя таблица:

func numberOfSections(in tableView: UITableView) -> Int {
    return self.productArray.count
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    let dic = productArray[section]
    return dic["name"] as? String
}

func tableView(_ tableView: UITableView, numberOfRowsInSection sectionInd: Int) -> Int {
    return (((?)))
}

Пожалуйста, помогите мне в просмотре данных в моих ячейках tableView, используя Alamofire и SwiftyJSON. Как я могу получить доступ к этим данным? Я имею в виду, как я могу получить numberOfRowsInSection?

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Попробуйте это:

Alamofire.request("url").responseJSON { (responseData) -> Void in
    if let data = response.data {
        guard let json = try? JSON(data: data) else { return }
        self.productArray = json.arrayValue //productArray type must be [[String:AnyObject]]   
    }

после этого обновления таблицыПросмотрите функции делегата:

func numberOfSections(in tableView: UITableView) -> Int {
    return self.productArray.count
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section:   Int) -> String? {
    let dic = productArray[section]
    return dic["name"].string
}

func tableView(_ tableView: UITableView, numberOfRowsInSection sectionInd: Int) -> Int {
    return productArray[sectionInd]["cabang"].arrayValue.count
}
0 голосов
/ 12 ноября 2018

// MARK: - UITableView Делегат & Источник данных

func numberOfSections(in tableView: UITableView) -> Int {

    return self.productArray.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    let dictionaryProduct = self.productArray.object(at: section) as! NSDictionary
    let arrayCabang = dictionaryProduct.object(forKey: "cabang") as! NSArray
    if arrayCabang.count > 0 {

        return arrayCabang.count
    } else {

        return 0
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


    let dictionaryProduct = self.productArray.object(at: indexPath.section) as! NSDictionary
    let arrayCabang = dictionaryProduct.object(forKey: "cabang") as! NSArray
    if arrayCabang.count > 0 {

        let dictionaryCurrentCabang = arrayCabang.object(at: indexPath.row) as! NSDictionary

        //Here you get data of cabangs at the particular index
    }

    return cell!
}
0 голосов
/ 12 ноября 2018

Во-первых, не используйте словарь или массив словаря сейчас. Вы можете использовать Codable вместо https://medium.com/@multidots/essentials-of-codable-protocol-in-swift-4-c795a645c3e1,

если вы используете словарь, тогда используйте Any вместо AnyObject.

Ваш ответ (self.productArray[sectionInd]["cabang"] as! [[String:Any]]).count

func tableView(_ tableView: UITableView, numberOfRowsInSection sectionInd: Int) -> Int {

    return ((self.productArray[sectionInd]["cabang"] as! [[String:Any]]).count
}
...