一尘不染

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

swift

我设法同时使用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

阅读 382

收藏
2020-07-07

共1个答案

一尘不染

使用限制为 Encodable

func saveObject<T : Encodable>(_ object: T, at location: String) {
    //Some code

    let data = try JSONEncoder().encode(object)

    //Some more code
}
2020-07-07