I managed to get both JSON and plist encoding and decoding working, but only by directly calling the encode/decode function on a specific object.
For example:
struct Test: Codable {
var someString: String?
}
let testItem = Test()
testItem.someString = "abc"
let result = try JSONEncoder().encode(testItem)
This works well and without issues.
However, I am trying to get a function that takes in only the Codable
protocol conformance as type and saves that object.
func saveObject(_ object: Encodable, at location: String) {
// Some code
let data = try JSONEncoder().encode(object)
// Some more code
}
This results in the following error:
Cannot invoke 'encode' with an argument list of type '(Encodable)'
Looking at the definition of the encode function, it seems as if it should be able to accept Encodable
, unless Value
is some strange type I don't know of.
open func encode<Value>(_ value: Value) throws -> Data where Value : Encodable
Use a generic type constrained to Encodable
func saveObject<T : Encodable>(_ object: T, at location: String) {
//Some code
let data = try JSONEncoder().encode(object)
//Some more code
}