首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果存在类型不匹配错误,是否可以将变量解码为nil

如果存在类型不匹配错误,是否可以将变量解码为nil
EN

Stack Overflow用户
提问于 2020-10-14 21:35:26
回答 1查看 158关注 0票数 0

所以基本上我想要的是任何时候API返回的类型不同于模型期望使该属性为空的类型。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct Person {
var name: String?
var someType: String?
}

如果API为someType属性返回一个数字,而不是一个字符串,我只想让它的值为nil

我知道我可以实现init(from decoder: Decoder)初始化器,但是我必须为每个响应的每个属性设置它,这将花费很长的时间。有没有更好更快的方法?

EN

回答 1

Stack Overflow用户

发布于 2020-10-14 21:54:58

您可以为可选字符串实现自己的decodeIfPresent,如果类型不匹配,则返回nil。这样你就不必实现一个自定义的初始化器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
extension KeyedDecodingContainer {
    public func decodeIfPresent(_ type: String.Type, forKey key: KeyedDecodingContainer<K>.Key) throws -> String? {
        do {
            return try decode(String.self, forKey: key)
        } catch DecodingError.typeMismatch, DecodingError.keyNotFound {
            return nil
        }
    }
}

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct Person: Decodable {
    let name: String?
    let someType: String?
}

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let json = #"{"name":"Steve","someType":1}"#
do {
    let person = try JSONDecoder().decode(Person.self, from: Data(json.utf8))
    person.name      // "Steve"
    person.someType  // nil
} catch {
    print(error)
}

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64361825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文