Быстро разобрать JSON в табличном представлении - PullRequest
0 голосов
/ 06 марта 2019

Кажется, я не могу понять, как разобрать мой json в табличное представление, я все еще довольно новичок в разработке Swift и iOS, поэтому некоторые вещи мне незнакомы.

Я следовал этому руководству: https://www.hackingwithswift.com/read/7/1/setting-up все заработало отлично, я просто не могу понять, как правильно проанализировать мой json в табличном представлении.Я получаю JSON из URL / API и успешно могу распечатать его в консоли.

Пример моего JSON:

{
"unackd": [
{
    "notification": {
        "title": "Title Test Number 200",
        "body": "passage local they water difficulty tank industry allow increase itself captured strike immediately type phrase driver change save potatoes stems addition behavior grain trap rapidly love refused way television bright 1100"
    },
    "data": {
        "id": "1100",
        "phone": "+15555551234"
    }
},
{
    "notification": {
        "title": "Title Test Number 199",
        "body": "announced beside well noted mysterious farm he essential likely deeply vast touch 1099"
    },
    "data": {
        "id": "1099",
        "phone": "+15555551234"
    }
}
],
"ackd": [
{
    "notification": {
        "title": "Title Test Number 200",
        "body": "passage local they water difficulty tank industry allow increase itself captured strike immediately type phrase driver change save potatoes stems addition behavior grain trap rapidly love refused way television bright 1100"
    },
    "data": {
        "id": "1100",
        "phone": "+15555551234"
    }
},
{
    "notification": {
        "title": "Title Test Number 199",
        "body": "announced beside well noted mysterious farm he essential likely deeply vast touch 1099"
    },
    "data": {
        "id": "1099",
        "phone": "+15555551234"
    }
}
]
}

Я получил эти структуры от: https://app.quicktype.io/?l=swift

import Foundation

struct JSONSource: Codable {
    let unackd: [Unackd]
}

struct Unackd: Codable {
    let notification: Notification
    let data: DataClass
}

struct DataClass: Codable {
    let id, phone: String
}

struct Notification: Codable {
    let title, body: String
}

Так что мой вопрос, как я могу разобрать "title "и" body "из" messages "в массиве unackd в каждой ячейке строки таблицы?

Спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Затем вы можете сделать

var notificationArr = [Notification]()

do {
  let res = try JSONDecoder().decode(JSONSource.self,from:data)
   notificationArr = res.unackd.map { $0.notification }
 }
 catch {
   print(error)
 }

После этого вы можете использовать notificationArr в качестве массива таблицы dataSource

.
0 голосов
/ 06 марта 2019

Я думаю, массивы Ackd и Unackd имеют одинаковые типы внутри.Итак, я думаю, это должно быть что-то вроде этого:

    var ackd:[Notification] = [Notification]()
    var unackd:[Notification] = [Notification]()

    func <your_func>(data:Data)->([Notification],[Notification])?{
         guard let res = try? JSONDecoder().decode(JSONSource.self,from:data) 
         else{ 
          return nil 
         }
         ackd = res["ackd"]
         unackd = res["unackd"]
         return (ackd, unackd)
    }

и в вашем tableView делегаты

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueCell(yourCell.self, indexPath: indexPath)
    let notif = unackd[indexPath.row]
    (cell as? yourCell)?.title.text = notif.title
    return cell
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...