How to convert a Swift object to a dictionary
I must disagree with @Darko.
In Swift 2,
use protocol oriented programming and the simple reflection offered by Mirror class :
protocol JSONAble {}extension JSONAble { func toDict() -> [String:Any] { var dict = [String:Any]() let otherSelf = Mirror(reflecting: self) for child in otherSelf.children { if let key = child.label { dict[key] = child.value } } return dict }}
then you can use this protocol with your request class and produce the desired dictionary :
class JsonRequest : JSONAble { var param1 : String? // ...}let request = JsonRequest()// set params of the requestlet dict = request.toDict()// use your dict
My solution to this will be something like this:
extension Encodable { var dict : [String: Any]? { guard let data = try? JSONEncoder().encode(self) else { return nil } guard let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String:Any] else { return nil } return json }}
and usage will be something like this:
movies.compactMap { $0.dict }
Swift currently does not support advanced reflection like Java or C# so the answer is: no, there is not an equally easy and automated way with pure Swift.
[Update] Swift 4 has meanwhile the Codable
protocol which allows serializing to/from JSON and PLIST.
typealias Codable = Decodable & Encodable