<div dir="ltr"><div>The error says ItemProtocol does not conform to ItemProtocol.</div><div>That doesn&#39;t make sense. It seems this should work fine.</div><div><br></div><div><div><div>// It&#39;s all clean until the last line</div><div>protocol ItemProtocol : class {</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>var message: String { get }</div><div>}</div><div><br></div><div>// heterogenious types</div><div>class A : ItemProtocol {</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>var message = &quot;A&quot;</div><div>}</div><div><br></div><div>class B : ItemProtocol {</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>var message = &quot;B&quot;</div><div>}</div><div><br></div><div><br></div><div>var items: [ItemProtocol] = [A(), B()]</div><div><br></div><div>func someFunc&lt;T: ItemProtocol&gt;(items: [T]) {</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>for item in items {</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>print(item.message)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>}</div><div>}</div><div><br></div><div>// Everything compiles fine until this</div><div>someFunc(items: items)</div></div><div><br></div></div></div>