Ios 使用Swift 4 Decodable将字符串JSON响应转换为布尔值
我正在重构一些以前使用过第三方JSON解析器的项目,我遇到了一个以字符串形式返回布尔值的愚蠢网站 这是JSON响应的相关片段:Ios 使用Swift 4 Decodable将字符串JSON响应转换为布尔值,ios,json,swift,swift4,decodable,Ios,Json,Swift,Swift4,Decodable,我正在重构一些以前使用过第三方JSON解析器的项目,我遇到了一个以字符串形式返回布尔值的愚蠢网站 这是JSON响应的相关片段: { "delay": "false", /* a bunch of other keys*/ } 我的解码结构如下所示: struct MyJSONStruct: Decodable { let delay: Bool // the rest of the keys } 如何将JSON响应中返回的字符串转换为Bool以匹配Swift 4中的结
{
"delay": "false",
/* a bunch of other keys*/
}
我的解码结构如下所示:
struct MyJSONStruct: Decodable {
let delay: Bool
// the rest of the keys
}
如何将JSON响应中返回的字符串转换为Bool以匹配Swift 4中的结构?虽然有帮助,但我不知道如何将字符串响应转换为布尔值。基本上,您必须编写一个自定义初始值设定项,但如果有许多好的键,但只有一个键可以从一个类型映射到另一个类型,则计算属性可能会很有用
struct MyJSONStruct: Decodable {
var delay: String
// the rest of the keys
var boolDelay : Bool {
get { return delay == "true" }
set { delay = newValue ? "true" : "false" }
}
}
基本上,您必须编写一个自定义初始值设定项,但如果有许多好的键,但只有一个可以从一个类型映射到另一个类型,那么计算属性可能会很有用
struct MyJSONStruct: Decodable {
var delay: String
// the rest of the keys
var boolDelay : Bool {
get { return delay == "true" }
set { delay = newValue ? "true" : "false" }
}
}
您需要在URLEncoding初始值设定项中设置boolEncoding:.literal
boolEncoding: .literal
您需要在URLEncoding初始值设定项中设置boolEncoding:.literal
boolEncoding: .literal
覆盖
init(解码器:解码器)
并手动处理所有解码。我之所以这么说,是因为你不能选择性地解码某些字段,而不是其他字段。哎哟。我有大约20个带嵌套结构的键,全部用于一个布尔值。比较overrideinit(decoder:decoder)
并手动处理所有解码。我之所以这么说,是因为你不能选择性地解码某些字段,而不是其他字段。哎哟。我有大约20个键和一些嵌套结构,都是一个布尔值。比较一下哦!太棒了!我宁愿添加3行代码,而不是自定义初始值设定项。谢谢大家!@LeoDabus I将let
更改为var
。再次感谢您的简单解决方案。哦!太棒了!我宁愿添加3行代码,而不是自定义初始值设定项。谢谢大家!@LeoDabus I将let
更改为var
。再次感谢这个简单的解决方法。