使用JSONEncoder编码类型为Codable的变量

我设法同时使用JSON和plist编码和解码,但是只能通过直接在特定对象上调用encoding / decode函数来实现。

例如:

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

}

这将导致以下错误:

无法使用类型为“(可编码)”的参数列表调用“编码”

看一下encoding函数的定义,似乎它应该能够接受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

}

以上是 使用JSONEncoder编码类型为Codable的变量 的全部内容, 来源链接: utcz.com/qa/403458.html

回到顶部