当前位置: 首页 > 面试题库 >

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

终洛华
2023-03-14
问题内容

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


 类似资料:
  • 问题内容: 我正在尝试找到使用Swift 4中新的JSONDecoder / Encoder对符合swift协议的结构数组进行编码/解码的最佳方法。 我做了一个小例子来说明这个问题: 首先,我们有一个协议标签和一些符合该协议的类型。 然后我们有一个带有标签数组的Type Article。 最后,我们对文章进行编码或解码 这是我喜欢的JSON结构。 问题是,在某些时候,我必须打开type属性以解码A

  • 问题内容: 我有一个实现Swift 4的结构。是否有一种简单的内置方法将该结构编码为字典? 问题答案: 如果您不介意数据移位,可以使用以下方法: 或可选变体 假设符合或确实可以做到这一点。

  • 问题内容: 我尝试解析返回json对象的api。我的问题是,在以下示例中,某些键有时是字符串,有时是类似“ Value”键的对象: 我的结构看起来像这样: 我必须告诉我我完全迷路了(是的,我是个迅速的初学者),我找不到解决我问题的方法。我知道我必须使用自定义init,但我不知道如何。 问题答案: 你可以试试

  • 问题内容: 嗨,我将以下结构嵌套在一个更大的结构中,该结构是通过api调用返回的,但是我无法对这部分进行编码/解码。我遇到的问题是customKey和customValue都是动态的。 我尝试了类似的操作,但是显然不起作用,因为它实际上不是的数组。 问题答案: 由于您将我的答案链接到另一个问题,因此我将扩展该问题以回答您的问题。 事实是,如果您知道要查找的位置,那么所有键在运行时都是已知的: 用法

  • 问题内容: 我在解码JSON结构时遇到问题,我无法对其进行更改以使其更易于解码(它来自firebase)。 如何将以下JSON解码为对象?问题是如何转换“ 7E7-M001”。这是带有抽屉的容器的名称。抽屉名称也用作键。 我必须在Container&Drawer类中解决哪些问题,才能将键作为title属性和这些类中的对象数组? 问题答案: 首先,我将略作简化,以便我可以集中讨论此问题的重点。我将使

  • 我有2种类型的类型类,其中一种类型包含另一种类型 我想这样称呼我的类型类: 但这行不通。 错误:(34,23)找不到参数e的隐式值:com.playground.Valides[com.playground.MyModel1,model.version.type]val v=隐式[Valides[MyModel1,model.version.type]]错误:(34,23)没有足够的隐式方法参数: