Encoding & Decoding
MBurgerSwift
has a built in system that can be used to init your custom constructs. You have only to make your construct conform to MBDecodable
protocol.
For example a News
that's reflecting a newsfeed block in MBurger:
class News: MBDecodable {
let text: String
let images: [MBImage]
let link: String
let date: Date
enum DecoderCodingKeys: String, CodingKey {
case text
case images
case link
case date
}
required init(from decoder: MBDecoder) throws {
let container = try decoder.container(keyedBy: DecoderCodingKeys.self)
text = try container.decode(String.self, forKey: .text)
images = try container.decode([MBImage].self, forKey: .images)
link = try container.decode(String.self, forKey: .link)
date = try container.decode(Date.self, forKey: . date)
}
}
And call the decode
function of MBDecoder
to create and populate an array of news like this:
MBClient.getSections(ofBlock: THE_BLOCK_ID, parameters: nil, elements: true, success: { (sections, _) in
sections.forEach { section in
do {
if let elements = section.elements {
let news = try MBDecoder.decode(News.self, elements: elements)
newsArray.append(news)
}
} catch let error {
self.showError(error)
}
}
}, failure: { error in
self.showError(error)
})
enum DecoderCodingKeys: String, CodingKey {
case text = "Title"
case images
case link
case date
}
You can find a complete example in the Example project.
Last updated
Was this helpful?