आप डेटा के स्थानांतरण का एक सा कोई आपत्ति नहीं है आप कुछ इस तरह इस्तेमाल कर सकते हैं चारों ओर:
extension Encodable {
func asDictionary() throws -> [String: Any] {
let data = try JSONEncoder().encode(self)
guard let dictionary = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any] else {
throw NSError()
}
return dictionary
}
}
या एक वैकल्पिक varient
extension Encodable {
var dictionary: [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] }
}
}
मान लिया जाये कि Foo
Codable
या वास्तव में Encodable
के अनुरूप है तो आप यह कर सकते हैं।
let struct = Foo(a: 1, b: 2)
let dict = try struct.asDictionary()
let optionalDict = struct.dictionary
आप अन्य तरीके से (init(any)
) जाना चाहते हैं, मैं एक पुस्तकालय CodableFirebase बनाएं जिसका नाम है इस Init an object conforming to Codable with a dictionary/array
स्रोत
2017-09-20 18:12:09
यह केवल उसी तरह के सभी गुणों के साथ संरचनाओं के लिए काम करेगा –