> For the complete documentation index, see [llms.txt](https://docs.mburger.cloud/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.mburger.cloud/ios-docs/type-decoding.md).

# 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:

```swift
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:

```swift
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)
})
```

{% hint style="info" %}
The DecoderCodingKey needs to match to the *`name`* of the element in the MBurger block(e.g. if the element on the dashboard is called *Title* the decoder key needs to be *Title*):
{% endhint %}

```swift
enum DecoderCodingKeys: String, CodingKey {
        case text = "Title"
        case images
        case link
        case date
 }
```

You can find a complete example in the Example project.
