Я использую эту библиотеку, которая создала непустые коллекции, такие как массивы, словари и строки.https://github.com/pointfreeco/swift-nonempty
Когда я декодирую в непустой массив, я получаю следующую ошибку
Swift.DecodingError.typeMismatch (Swift.Dictionary, Swift.DecodingError.Context (codingPath: [CodingKeys (stringValue: "poiList", intValue: nil)], debugDescription: "Ожидается декодировать словарь, но вместо него найден массив.", underError: nil))
Это моя структура
struct LocationCarModel: Codable {
// MARK: - Properties
var poiList: NonEmptyArray<PointOfInterest>
// MARK: - PointOfInterest
struct PointOfInterest: Codable {
var id: Int
var coordinate: Position
var fleetType: String
let numberPlate = "HCD837EC"
let model: String = "Tesla S"
let fuel: Double = 0.9
}
}
Это ответ, который я получаю https://fake -poi-api.mytaxi.com /? P2Lat = 53.394655 & p1Lon = 9.757589 & p1Lat = 53.694865 & p2Lon = 10.099891
и вот как яЯ декодирую его.
public extension Decodable {
static func parse(from item: Any?, strategy: JSONDecoder.KeyDecodingStrategy = .useDefaultKeys) -> Self? {
guard let data = self.data(from: item) else {
return nil
}
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = strategy
do {
let result = try decoder.decode(Self.self, from: data)
return result
} catch {
debugPrint(error)
return nil
}
}
private static func data(from item: Any?) -> Data? {
switch item {
case let data as Data:
return data
case let string as String:
return string.data(using: .utf8)
case .some(let item):
return try? JSONSerialization.data(withJSONObject: item, options: [])
case nil:
return nil
}
}
}
, и строка для декодирования с использованием вышеуказанной функции:
let model = LocationCarModel.parse(from: data)
Если изменить poiList на стандартный массив swift, то ошибка не возникнет.
Есть идеи, как я могу решить эту проблему?Любая помощь будет оценена.Заранее спасибо.