title: Protocol type cannot conform to protocol because only concrete types can conform to protocols
body: <p>Within the app, we have two types of Stickers, String and Bitmap. Each sticker pack could contain both types. This is how I declare the models:</p>
  
  <pre><code>// Mark: - Models
  
  protocol Sticker: Codable {
  }
  
  public struct StickerString: Sticker,  Codable, Equatable {
      let fontName: String
      let character: String
  }
  
  public struct StickerBitmap: Sticker,  Codable, Equatable {
      let imageName: String
  }
  </code></pre>
  
  <p>After the user chooses some stickers and used them, we want to save the stickers into <code>UserDefaults</code> so we can show him the "Recently Used" Sticker tab. I'm trying to Decode the saved <code>[Sticker]</code> array:</p>
  
  <pre><code>let recentStickers = try? JSONDecoder().decode([Sticker].self, from: data)
  </code></pre>
  
  <p>But I get the following compile error:</p>
  
  <pre><code>Protocol type 'Sticker' cannot conform to 'Decodable' because only concrete types can conform to protocols
  </code></pre>
  
  <p>I can't understand why as I declared <code>Sticker</code> as <code>Codable</code> which also implement <code>Decodable</code>. Any help would be highly appreciated! </p>