使用JSON编码器将types为Codable的variables编码

我设法得到JSON和P列表编码和解码工作,但只能直接调用特定对象的编码/解码function。

例如:

struct Test: Codable { var someString: String? } let testItem = Test() testItem.someString = "abc" let result = try JSONEncoder().encode(testItem) 

这工作正常,没有问题。

但是,我想获得一个函数,只接受Codable协议一致性types并保存该对象。

 func saveObject(_ object: Encodable, at location: String) { //Some code let data = try JSONEncoder().encode(object) //Some more code } 

这会导致以下错误:

无法用types为“(Encodable)”的参数列表调用“encode”

看着编码函数的定义,好像应该可以接受Encodable,除非Value是一些我不知道的奇怪types。

  open func encode<Value>(_ value: Value) throws -> Data where Value : Encodable 

使用约束到Encodable的genericstypes

 func saveObject<T : Encodable>(_ object: T, at location: String) { //Some code let data = try JSONEncoder().encode(object) //Some more code }