gpt4 book ai didi

json - 在 SwiftyJSON 中处理可选元素的最佳方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 01:06:29 25 4
gpt4 key购买 nike

我正在使用 SwiftyJSON ( https://github.com/SwiftyJSON/SwiftyJSON )。假设我有两种格式之一的 JSON 响应:

{
"id": 1,
"foo": "bar"
}

或者

{
"id": 1,
"foo": "bar",
"user": {"id": 2}
}

我只想在 JSON 中存在“user”元素时更新我的​​ Swift 对象的“user”属性。现在我正在这样做:

let userJson = json["user"]
if userJson.type != .Null && userJson.type != .Unknown {
user = User.create(userJson)
}

有没有更好的方法来处理这个问题?比如说,使用 Swift 的 if-let 语法?

最佳答案

我想不出比您正在做的更优雅的方法,但另外我所做的是在构造函数中移动我的检查。我为我的实现所做的是每个可以反序列化为数据传输对象的类,我必须为以字典作为参数的构造函数提供一个实现。字典是来自 API 的 json。我显然在我的代理层中确保它确实可以反序列化,不为空,并且可以表示为字典。

因为我知道 API 调用可能会返回某种错误的响应(通常从我的代理层处理)或者正是我调用该调用所需的契约(Contract)(转换为 DTO)我可以对返回的内容做出一些假设.

如果您有可能无法返回某些东西,除非这是一个复杂的项目,否则您可能会像这样在构造函数中进行此类检查:

 required init(dict dictionary: NSDictionary)
{
self.id = dictionary["id"] as Int
self.foo = dictionary["foo"] as String
self.user = ( (dictionary["user"] == nil) ? User() : User(dictionary["user"]))
}

所以现在在这里,我说如果它是 nil 则返回一个新的用户对象,但也许你只想保持它为 nil。否则,如果不是,则将“用户字典”(原始 JSON 中的一个子项,在本例中为 {"id":2})传递到用户类构造函数中,它几乎会做同样的事情,但会滋润您的用户对象.

我猜用户类可能是:

 required init(dict dictionary: NSDictionary)
{
self.id = (dictionary["id"] as Int)
}

关于json - 在 SwiftyJSON 中处理可选元素的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27518512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com