我设法同时使用JSON和plist编码和解码,但是只能通过直接在特定对象上调用encoding / decode函数来实现。
例如:
struct Test: Codable { var someString: String? } let testItem = Test() testItem.someString = "abc" let result = try JSONEncoder().encode(testItem)
这很好,没有问题。
但是,我试图获得一个仅接受Codable协议一致性作为类型并保存该对象的函数。
Codable
func saveObject(_ object: Encodable, at location: String) { // Some code let data = try JSONEncoder().encode(object) // Some more code }
这将导致以下错误:
无法使用类型为“(可编码)”的参数列表调用“编码”
看一下encoding函数的定义,似乎它应该能够接受Encodable,除非Value是我不知道的某种奇怪的类型。
Encodable
Value
open func encode<Value>(_ value: Value) throws -> Data where Value : Encodable
使用限制为 Encodable
func saveObject<T : Encodable>(_ object: T, at location: String) { //Some code let data = try JSONEncoder().encode(object) //Some more code }