<div dir="ltr"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">Hello everyone, </span><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px"><br></div><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">I am looking a way to express something similar to the following code in Swift terms:</div><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px"><div style="margin:0px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">protocol</span><span style="font-variant-ligatures:no-common-ligatures"> AnyViewModelInput {}</span></div><div style="margin:0px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">protocol</span><span style="font-variant-ligatures:no-common-ligatures"> AnyViewModel&lt;</span><span style="color:rgb(97,34,174)">ViewMode<wbr>lInput&gt;</span><span style="font-variant-ligatures:no-common-ligatures">: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(97,34,174)">ViewModelInput</span><span style="font-variant-ligatures:no-common-ligatures"> </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">where</span><span style="font-variant-ligatures:no-common-ligatures"> <wbr>ViewModelInput: AnyViewModelInput {</span></div><div style="margin:0px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">    </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">var</span><span style="font-variant-ligatures:no-common-ligatures"> input: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(97,34,174)">ViewModelInput</span><span style="font-variant-ligatures:no-common-ligatures"> { </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)"><wbr>get</span><span style="font-variant-ligatures:no-common-ligatures"> }</span></div><div style="margin:0px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">}</span></div></div><div style="color:rgb(0,0,0);font-size:12px;margin:0px;line-height:normal;font-family:Menlo"><br></div><div style="color:rgb(0,0,0);font-size:12px;margin:0px;line-height:normal;font-family:Menlo"><span style="font-family:Helvetica">Such construct supposed to avoid code duplications as follows and reuse code for splitting view models its inputs etc:</span><br></div><div style="color:rgb(0,0,0);font-size:12px;margin:0px;line-height:normal;font-family:Menlo"><div style="margin:0px;line-height:normal"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">protocol</span><span style="font-variant-ligatures:no-common-ligatures"> FooViewModelInput {</span></div><div style="margin:0px;line-height:normal"><span style="font-variant-ligatures:no-common-ligatures">    </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">var</span><span style="font-variant-ligatures:no-common-ligatures"> foo: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)">Int</span><span style="font-variant-ligatures:no-common-ligatures"> { </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">get</span><span style="font-variant-ligatures:no-common-ligatures"> </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">set</span><span style="font-variant-ligatures:no-common-ligatures"> }</span></div><div style="margin:0px;line-height:normal"><span style="font-variant-ligatures:no-common-ligatures">}</span></div><div style="margin:0px;line-height:normal;min-height:21px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div><div style="margin:0px;line-height:normal"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">protocol</span><span style="font-variant-ligatures:no-common-ligatures"> FooViewModelProtocol: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(60,130,139)">FooViewModelInput</span><span style="font-variant-ligatures:no-common-ligatures"> {</span></div><div style="margin:0px;line-height:normal"><span style="font-variant-ligatures:no-common-ligatures">    </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">var</span><span style="font-variant-ligatures:no-common-ligatures"> input: </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(60,130,139)">FooViewModelInput</span><span style="font-variant-ligatures:no-common-ligatures"> { </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">get</span><span style="font-variant-ligatures:no-common-ligatures"> }</span></div><div style="margin:0px;line-height:normal"><span style="font-variant-ligatures:no-common-ligatures">}</span></div><div style="margin:0px;line-height:normal;min-height:21px"><span style="font-variant-ligatures:no-common-ligatures"></span><br></div><div style="margin:0px;line-height:normal;color:rgb(60,130,139)"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">final</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"> </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">class</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"> FooViewModel: </span><span style="font-variant-ligatures:no-common-ligatures">FooViewModelProtocol</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"> {</span></div><div style="margin:0px;line-height:normal;color:rgb(60,130,139)"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">    </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">var</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"> input: </span><span style="font-variant-ligatures:no-common-ligatures">FooViewModelInput</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"> {</span></div><div style="margin:0px;line-height:normal;color:rgb(196,34,117)"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">        </span><span style="font-variant-ligatures:no-common-ligatures">return</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"> </span><span style="font-variant-ligatures:no-common-ligatures">self</span></div><div style="margin:0px;line-height:normal"><span style="font-variant-ligatures:no-common-ligatures">    }</span></div><div style="margin:0px;line-height:normal;min-height:21px"><span style="font-variant-ligatures:no-common-ligatures">    </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(196,34,117)">var</span><span style="font-variant-ligatures:no-common-ligatures"> foo = </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(4,53,255)">0</span><br><span style="font-variant-ligatures:no-common-ligatures"></span></div><div style="margin:0px;line-height:normal"><span style="font-variant-ligatures:no-common-ligatures">}</span></div></div><div style="color:rgb(0,0,0);font-size:12px;margin:0px;line-height:normal;font-family:Menlo"><br></div><div style="color:rgb(0,0,0);font-size:12px;margin:0px;line-height:normal;font-family:Menlo"><span style="font-family:Helvetica">Is it possible in current Swift? Will it be possible if generic manifesto will be implemented in full? Also if you know how to express a similar idea in any other language, I would love to see examples. How does such construct is named in other languages?</span><br></div><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px;margin:0px;line-height:normal"><br></div><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px;margin:0px;line-height:normal">Thank in advance,</div><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px;margin:0px;line-height:normal">Nikita</div></div>