Мне удалось заставить работать кодирование и декодирование JSON и plist, но только путем непосредственного вызова функции кодирования/декодирования определенного объекта.
Например:
struct Test: Codable {
var someString: String?
}
let testItem = Test()
testItem.someString = "abc"
let result = try JSONEncoder().encode(testItem)
Это работает хорошо и без проблем.
Тем не менее, я пытаюсь получить функцию, которая принимает только в Codable
протоколе соответствии, как тип и сохраняет этот объект.
func saveObject(_ object: Encodable, at location: String) {
// Some code
let data = try JSONEncoder().encode(object)
// Some more code
}
Это приводит к следующей ошибке:
Невозможно вызвать 'кодировать' со списком аргументов типа '(кодируемый)'
Глядя на определение функции кодирования, кажется, что она должна принимать Encodable
, если только Value
является каким-то странным типом, о котором я не знаю.
open func encode<Value>(_ value: Value) throws -> Data where Value : Encodable