У вас есть какой-то ответ, и значение этого ответа, скорее всего, имеет тип Data
, поэтому вам нужно декодировать его в некоторый тип Swift.
С Swift 4 выможет легко использовать протокол Decodable
для декодирования Data
в вашу пользовательскую модель, соответствующую этому протоколу.
Итак, давайте создадим простую структуру для простого json
Json:
let data = Data("""
{
"property": "someName"
}
""".utf8)
Модель:
struct Model: Decodable {
let property: String
}
Каждое свойство также должно быть Decodable
, поэтому, если у вас есть другая декодируемая структура, вы можете использовать ее как тип свойства и даже использовать его для массиваэтот тип, или, например, некоторый словарь
Json:
let data = Data("""
{
"items": [
{ "title": "name1" },
{ "title": "name2" },
{ "title": "name3" }
]
}
""".utf8)
Модель:
struct Model: Decodable {
let items: [Item]
}
struct Item: Decodable {
let title: String
}
Вы видите этот шаблон?Поэтому попробуйте реализовать это в вашем случае самостоятельно.
Теперь последняя часть: декодирование.Для декодирования Data
вы можете просто использовать JSONDecoder
и метод decode
.Просто укажите тип вывода и передайте Data
object
Обратите внимание, что декодирование может вызвать ошибку, поэтому вы должны поместить его в блок do-try-catch
guard let data = response.result.value else { ... }
do {
response.result.value!
let models = try JSONDecoder().decode([Model].self, from: data)
} catch { print(error) }