Использование additionalProperties
- это правильный способ описать hashamp с помощью спецификации OpenAPI (fka. Swagger), но пользовательский интерфейс Swagger пока не отображает их.
Проблема отслеживается здесь https: / /github.com/swagger-api/swagger-ui/issues/1248
Между тем вы можете использовать этот трюк, чтобы определить не требуемое свойство (default
в примере ниже) тот же тип объектов карты и дать некоторый намек в описании:
swagger: "2.0"
info:
version: 1.0.0
title: Hashmap
paths: {}
definitions:
MapItem:
properties:
firstname:
type: string
lastname:
type: string
Map:
description: a (key, MapItem) map. `default`is an example key
properties:
default:
$ref: '#/definitions/MapItem'
additionalProperties:
$ref: '#/definitions/MapItem'
Это описание не изменяет контракт API и улучшает документацию.
Поскольку ваш json - это просто массив объектов, цикл foreach не нужен, и вы можете просто указать, что результат декодирования должен быть массивом News
, указав тип результата в квадратных скобках: [News].self
[116 ]
guard let news = try? JSONDecoder().decode([News].self, from: Data(jsonNews.utf8)) else {
debugPrint("An error has occurred")
return
}
debugPrint(news)
arrayNews = news
Кроме того, если нет конкретной причины, по которой ваша модель должна наследоваться от NSObject
, вы можете упростить ее, сделав ее struct
. Также вам не нужны значения по умолчанию, так как все значения будут назначаться инициализатором декодера
struct News: Decodable {
let idPlace, namePlace, dateMsg, msg, urlPicture: String
}