gpt4 book ai didi

ios - 如何在 Swift 中创建一个内联字典,同时忽略可能为 nil 的可选值?

转载 作者:搜寻专家 更新时间:2023-11-01 05:58:02 24 4
gpt4 key购买 nike

我有一些可选属性(为简洁起见,类中实际属性的一小部分示例):

var assigneeIds: [Int]?
var locationIds: [Int]?
var searchQuery: String?

我需要将它们转换为 JSON。 API 的维护者建议我不要提供带有 nil 值的键,所以我的 toJson 方法如下所示:

var result: [String: AnyObject] = [:]
if let assigneeIds = assigneeIds {
result["assignee_ids"] = assigneeIds
}
if let locationIds = locationIds {
result["location_ids"] = locationIds
}
if let searchQuery = searchQuery {
result["search_query"] = searchQuery
}
return result

这感觉不是很“swift ”——它相当冗长。理想情况下,我希望它看起来类似于以下内容 - 如果可选值没有值,则不设置键除外。下面的代码仍然会设置 key ,以及一个 NSNull 值,该值在生成的 JSON 中被序列化为 "assignee_ids": null。据推测,我可以将序列化程序配置为省略 NSNull 值,但我在其他地方遇到过这种模式,我很想看看是否有更好的方法。

return [
"assignee_ids" : self.assigneeIds ?? NSNull(),
"location_ids" : self.locationIds ?? NSNull(),
"search_query" : self.searchQuery ?? NSNull()
]

以这种方式构建内联字典时,如何跳过创建 key->NSNull 条目?

最佳答案

实际上你根本不需要解包这些值,因为当它为 nil 时,它不会被设置到字典中。示例:

var dict : [String : Any] = [:]

dict["a"] = 1 // dict = ["a" : 1]
dict["b"] = nil // dict = ["a" : 1]
dict["a"] = nil // dict = [:]

你也可以CMD-点击括号,查看字典下标的定义:

public subscript (key: Key) -> Value?

这意味着你得到一个 Optional(无论它是否存在)并且你设置一个 Optional(设置或删除它)

您的代码将如下所示:

var result: [String: AnyObject] = [:]
result["assignee_ids"] = assigneeIds
result["location_ids"] = locationIds
result["search_query"] = searchQuery
return result

关于ios - 如何在 Swift 中创建一个内联字典,同时忽略可能为 nil 的可选值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33549223/

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