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

使用Decodable进行JSON解析时,Optional和DeleteIfPresent有什么区别?

汝和裕
2023-03-14
问题内容

Codable第一次使用Swift 4的协议,我无法理解decodeIfPresentfrom的使用Decodable

/// Decodes a value of the given type for the given key, if present.
///
/// This method returns `nil` if the container does not have a value associated with `key`, or if the value is null. The difference between these states can be distinguished with a `contains(_:)` call.
///
/// - parameter type: The type of value to decode.
/// - parameter key: The key that the decoded value is associated with.
/// - returns: A decoded value of the requested type, or `nil` if the `Decoder` does not have an entry associated with the given key, or if the value is a null value.
/// - throws: `DecodingError.typeMismatch` if the encountered encoded value is not convertible to the requested type.
public func decodeIfPresent(_ type: String.Type, forKey key: KeyedDecodingContainer.Key) throws -> String?

nil如果没有关联的键值,则建议返回。如果这是唯一的原因,那么它与可选属性有何不同,因为可选变量也设置为nil如果响应中不存在值。


问题答案:

这两行代码之间有一个细微但重要的区别:

// Exhibit 1
foo = try container.decode(Int?.self, forKey: .foo)
// Exhibit 2
foo = try container.decodeIfPresent(Int.self, forKey: .foo)

图表1将解析:

{
  "foo": null,
  "bar": "something"
}

不是

{
  "bar": "something"
}

而展览2将很高兴地解析两者。因此,在正常的JSON解析器用例中,您需要decodeIfPresent模型中的每个可选项。



 类似资料:
  • 问题内容: YAML和JSON有什么区别,特别考虑以下几点? 性能(编码/解码时间) 内存消耗 表达清晰 库的可用性,易用性(我更喜欢C) 我打算在嵌入式系统中使用这两个之一来存储配置文件。 问题答案: 从技术上讲,YAML是JSON的超集。这意味着,至少从理论上讲,YAML解析器可以理解JSON,但不一定可以理解。 请参阅标题为“ YAML:与JSON的关系” 的部分中的官方规范。 通常,我喜欢

  • 问题内容: 明智地设置格式,明智地使用文件类型以及明智地使用实用程序? 问题答案: JSONP是带填充的JSON。就是说,您在字符串的开头加上了一对括号。例如: 结果是您可以将JSON作为脚本文件加载。如果您之前设置了一个名为的函数,则在脚本文件加载完成后,将使用一个参数(即JSON数据)调用该函数。这通常用于允许使用JSON数据进行跨站点AJAX。如果您知道example.com正在提供类似于上

  • 问题内容: 我有一个具有以下用于路由的代码的应用程序: 现在,我必须将路由代码放在不同的文件中,因此我尝试使用此方法,但是它可能 无法 工作,因为它代替了它,而使用了: 如何使用将路由放入不同的文件中? 为什么,,,等,都没有在工作使用后在其中? 问题答案: 这是一个简单的例子: 在这里, 将实例安装在 ,这样添加到实例的任何路由都将相对于。

  • 问题内容: 我想从类型为的JSON解析数据。我正在使用Google Gson。 我有: 我的课是: 问题答案: 这是执行此操作的简单代码,我避免了所有检查,但这是主要思想。 为了使使用更加通用- 您会发现Gson的javadocs非常清楚并且很有帮助。

  • 我正在编写我的第一个Haskell程序,试图解析文件中的“csv”。到目前为止,我已经写了以下内容 我设法解析json或csv,但将这些东西粘在一起是我目前对Haskell的理解(我是一个非常新手)的一种方式。我认为问题是我没有属性实例化DC。从记录中我得到一个错误 |66|parseBook m=EmtecCSV

  • 问题内容: 明智地设置格式,明智地使用文件类型以及明智地使用实用程序? 问题答案: JSONP是带填充的JSON,也就是说,您将字符串放在开头,并在其周围加上一对括号。例如: 结果是您可以将JSON作为脚本文件加载。如果您之前设置了一个名为的函数,那么在脚本文件加载完成后,将使用一个参数(即JSON数据)调用该函数。这通常用于允许带有JSON数据的跨站点AJAX。如果您知道example.com正