Возникли проблемы с выполнением этого: я пытаюсь абстрагировать JSON-декодирование в функцию, принимая в качестве аргументов Codable плюс некоторые данные.
Поэтому для этого мне нужно иметь следующую сигнатуру функции:
func doTheJSONDecoding(cdbl: Codable, data: Data) {...}
Вот мой код, начиная с модели данных.Ниже приведены два примера ....
import UIKit
import Foundation
struct MyStructCodable : Codable {
let items : [MyValue]?
}
struct MyValue : Codable {
let value : String?
}
let dta: Data = """
{
"items": [
{
"value": "Hello1"
}
]
}
""".data(using: .utf8)!
Затем два примера:
// Example 1: this code works fine !!!!!!!!!!!!!!!!!!!!!!!!
let decoder = JSONDecoder()
do {
let result = try decoder.decode(MyStructCodable.self, from: dta)
print(result.items?[0].value ?? "")
} catch {
print(error)
}
// above code prints: Hello1
// Example 2: this code does not work - WHY ???????????????
func doTheJSONDecoding(cdbl: Codable, data: Data) {
let decoder = JSONDecoder()
do {
let result = try decoder.decode(cdbl, from: data)
print(result.items?[0].value ?? "")
} catch {
print(error)
}
}
let myValue = MyValue(value: "Hello2")
let myStructyCodable = MyStructCodable(items: [myValue])
doTheJSONEncoding(cdbl: myStructyCodable, data: dta)
В функции выдается сообщение об ошибке:
Есть ли способ сохранить подпись функции (т. Е. func doTheJSONDecoding(cdbl: Codable, data: Data)
и при этом заставить ее работать)? Любая помощь приветствуется.