问题标签 [codable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
16847 浏览

swift - Swift 4 Decodable - 以枚举为键的字典

我的数据结构有一个枚举作为键,我希望下面的内容能够自动解码。这是一个错误还是一些配置问题?

我得到的错误是这个,似乎将字典与数组混淆了。

typeMismatch(Swift.Array, Swift.DecodingError.Context(codingPath: [Optional(__lldb_expr_85.AStruct.(CodingKeys in _0E2FD0A9B523101D0DCD67578F72D1DD).dictionary)], debugDescription: "预期解码 Array 但找到了字典。"))

0 投票
1 回答
318 浏览

ios - 用 Swift 4 编写的 Pod

我有个问题,

我可以在 Swift 4 和 Xcode 9 中编写一个像 Cocoapods pod 这样的库,然后在用 Swift 3 或更早版本编写的旧项目中使用它吗?

例如,它会有一个使用新Codable协议的类。那个班级会在旧项目中工作吗?

谢谢你的帮助。

0 投票
1 回答
1254 浏览

swift - 可解码 - 继承防止解码器初始化合成

我有以下 Swift 4Codable类,它继承自 Realm 的 Object 类型:

这里的期望是该init(from decoder: Decoder)方法被合成,这样我就不必自己实现它,这是一个巨大的便利。但是,不执行此操作会产生以下编译器错误:

super.init isn't called on all paths before returning from initializer

有三种方法可以消除编译器错误,但没有一个是好的:

  1. 实现一个空init(from decoder: Decoder)方法,它只调用super.init(). 这似乎阻止了合成,这意味着实际上没有任何东西被解码,因为它只是一个空方法。

  2. 手动实现整个init(from decoder: Decoder)方法。这行得通,但现在使用的乐趣Codable几乎消失了。

  3. 删除所有与 Realm 相关的代码。现在 Codable 可以按预期工作,但是,现在我不能再使用 Realm 了。

这对我来说似乎是一个 Swift 错误,因为它应该检测到init(from decoder: Decoder)实际上正在实现,而不是手动实现。

有什么我不知道的建议或解决方法吗?

0 投票
3 回答
6313 浏览

json - 如何将(Swift4)初始化添加到可解码协议

我正在尝试创建一个Codable 扩展,该扩展能够仅使用 json 字符串初始化可解码(Swift 4)对象。所以应该工作的是:

我认为这意味着我应该创建一个使用解码器调用 self.init 的 init。这是我想出的代码:

该代码能够获取解码器,但在调用 init 时出现编译器错误。我得到的错误是:

'self' 在 self.init 调用之前使用

这是否意味着无法在 Decodable 协议中添加 init ?

有关完整的源代码,请参见github 上的可编码扩展

更新: 从@appzYourLive 调试以下解决方案后,我发现我与可init(json:解码和数组上的初始化程序发生冲突。我刚刚在 GitHub 上发布了一个新版本的扩展。我还添加了解决方案作为这个问题的新答案。

0 投票
4 回答
19446 浏览

swift - 如何在 swift 4 Codable 中手动解码数组?

这是我的代码。但我不知道将值设置为什么。它必须手动完成,因为实际结构比这个例子稍微复杂一些。

请问有什么帮助吗?

0 投票
1 回答
364 浏览

ios - Codable/Decodable 不是解码

有人可以帮我吗?我在此示例中使用 Playground,因此您可以将整个代码放入 Playground 并查看结果。

我发现当我删除这一行时:

它似乎工作。

(JSON 已验证)

0 投票
1 回答
3767 浏览

swift - Codable/Decodable 应该用字符串解码数组

为什么名称数组不解码?

为游乐场准备,只需将其粘贴到您的游乐场

0 投票
3 回答
13186 浏览

ios - 使用 JSONEncoder 对类型为 Codable 的变量进行编码

我设法让 JSON 和 plist 编码和解码工作,但只能通过直接调用特定对象上的编码/解码函数。

例如:

这很好用,没有问题。

但是,我试图获得一个仅将Codable协议一致性作为类型并保存该对象的函数。

这会导致以下错误:

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

查看 encode 函数的定义,似乎它应该能够接受Encodable,除非Value是一些我不知道的奇怪类型。

0 投票
1 回答
3170 浏览

json - 使用 Swift 4 的 Codable 进行类型转换

我正在使用CodableSwift 4 中的新协议。我正在通过URLSession. 以下是一些示例数据:

我想把它解码成这样的结构:

但我不确定如何将原始数据中的分辨率字符串转换为结构Int中的单独属性Resolution。我已经阅读了官方文档和一两个很好的教程,但是这些侧重于可以直接解码数据的情况,无需任何中间处理(而我需要在 处拆分字符串x,将结果转换为Ints 并分配它们和Resolution.x) .y。这个问题似乎也很相关,但是提问者想避免手动解码,而我对这种策略持开放态度(尽管我自己不确定如何去做)。

我的解码步骤如下所示:

由哪里data提供URLSession.shared.dataTask(with: URL, completionHandler: Data?, URLResponse?, Error?) -> Void)

0 投票
5 回答
9801 浏览

swift4 - 使用 Codable 将接收到的 Int 转换为 Bool 解码 JSON

我有这样的结构:

和这种格式的 JSON(用于在没有额外包装的情况下从设置中提取键的结构):

问题是我如何将“isEnabled”转换为 Bool,(从 API 获取 1 或 0)当我尝试解析响应时,我得到错误:“预期解码 Bool,但找到了一个数字。”