Swift, чтобы получить результат значений массива из JSON - PullRequest
0 голосов
/ 20 сентября 2018

В моем сценарии у меня есть четыре метки в представлении, мне нужно получить результат значения меток и присвоить этим меткам. Если я получил только один индекс в массиве, мне нужно вызвать какую-то другую функцию.Я использую старый метод JSON, не кодируемый и сторонний lib.Пожалуйста, предоставьте какое-нибудь решение.

Ниже мой ответ

{
    "status": 1,
    "status_code": 200,
    "result": [
        "100 marks",
        "30 marks",
        "40 marks",
        "70 marks"
    ]
}

Ниже кода я использую

if (status_code != 200) {
    print("ERROR:\(String(describing: status_code))")
} else {
    let results = result["result"]  as? String
    print("Marks:\(results ?? "")")

    // Call confirmation alert
    DispatchQueue.main.async {
        self.one_label.text! = ""
        self.two_label.text! = ""
        self.three_label.text! = ""
        self.four_label.text! = ""
    }
}

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Результат имеет [Строка], поэтому, пожалуйста,

Замените

let results = result["result"]  as? String

на

   if let results = result["result"]  as? [String], results.count >= 4 {

    self.one_label.text! = results[0] ?? ""
    self.two_label.text! = results[1] ?? ""
    self.three_label.text! = results[2] ?? ""
    self.four_label.text! = results[3] ?? ""

    } else {
        // Call your function here
    }
0 голосов
/ 20 сентября 2018

Неправильная часть вашего кода: вы пытаетесь преобразовать result["result"] в единственное число String, а это не так!это массив строк.Итак, что вы должны сделать, это:

if let results = result["result"]  as? [String] {
    print(results[0]) // first mark in the array (100 marks)
}

Кроме того:

На этом этапе я бы рекомендовал следовать подходу шаблонизации данные вместо того, чтобы иметь дело со словарями.Поскольку у вас есть действующий Json, вы можете легко добиться этого с помощью протокола Docadable, пример:

let json = """
{
"status": 1,
"status_code": 200,
"result": [
"100 marks",
"30 marks",
"40 marks",
"70 marks"
]
}
""".data(using: .utf8)

struct Result: Decodable {
    var status: Int
    var statusCode: Int
    var result: [String]

    enum CodingKeys: String, CodingKey {
        case status
        case statusCode = "status_code"
        case result
    }
}

let decoder = JSONDecoder()
let resultObject = try decoder.decode(Result.self, from: json!)
print(resultObject)
0 голосов
/ 20 сентября 2018

Результатом в json является массив.Так что вам нужно привести его к массиву.

let results = result["result"]  as? [String]
        print("Marks:\(results ?? "")")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...