gpt4 book ai didi

swift - 如何将符合 Codable 协议(protocol)的对象数组转换为 Dictionary 数组?

转载 作者:行者123 更新时间:2023-11-28 05:55:12 26 4
gpt4 key购买 nike

我有一个像这样的结构:

struct Demo: Codable {
var foo: String
var bar: String
...
}

我有一系列演示:

let array = [Demo(foo: "a", bar: "b"), Demo(foo: "c", bar: "d")]

我想将此数组转换为字典 [[String: Any]],内容如下:

let dictionary:[[String : Any]] = array.toDictionaryFromArrayOfCodable()

我怎样才能得到它?

编辑:我的预期输出是这样的,我想使用 JSONEncoder:

[["foo": "a", "bar": "b"], ["foo": "c", "bar": "d"]]

最佳答案

我找到了一个使用两个扩展的解决方案:- 首先从对象中获取字典- 其次,使用第一个扩展名创建包含数组每个元素的字典数组:

用法:

let dictionary = [Demo].asDictionaryFromArray()
print(dictionary)

按预期输出:[["酒吧": b, "foo": a], ["酒吧": d, "foo": c]]

extension Encodable {

var dictionaryFromObject: [String: Any]? {
guard let data = try? JSONEncoder().encode(self) else { return nil }
return (try? JSONSerialization.jsonObject(with: data, options: .allowFragments)).flatMap { $0 as? [String: Any] }
}

}

extension Array where Element: Encodable {

func asDictionaryFromArray() -> [[String: Any]] {
var dict = [[String: Any]]()

_ = self.map {
if let objectDict = $0.dictionaryFromObject {
dict.append(objectDict)
}
}

return dict
}

}

关于swift - 如何将符合 Codable 协议(protocol)的对象数组转换为 Dictionary 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51668678/

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