<div dir="ltr">Hey all,<div><br></div><div>I wanted to know if theres a work around for a problem I am having</div><div><br></div><div>lets say I have a protocol </div><div><br></div><div>protocol <b>Graphable</b> : CustomStringConvertible, Sequence, Collection {</div><div>    var vertices : [AnyVertexable] { get set }</div><div><b>    var edges: [AnyEdge]? { get set }</b></div><div>     ....</div><div>    ....</div><div>}</div><div><br></div><div>Then I have 2 classes that inherit from them </div><div><br></div><div>class <b>EZUndirectedGraph</b> : Graphable {</div><div>    var vertices : [AnyVertexable] </div><div><b>    var edges: [AnyEdge]? </b></div><div>     .....</div><div>}</div><div><br></div><div><div>class <b>EZDirectedGraph</b> : Graphable {</div><div><div>    var vertices : [AnyVertexable]</div><div><b>    var edges: [AnyEdge]? </b></div></div><div><b>    // </b>var edges : [AnyEdge]</div><div>    ....</div><div>}</div></div><div><br></div><div>Is there a way for me to make the &quot;edges&quot; variable in &quot;<b>EZDirectedGraph</b>&quot; to NOT be an optional while still conforming to the same protocol? As one may know, a condition for directed graphs requires there to be atleast 1 edge. </div><div><br></div><div>Advice or alternative workarounds would be nice with respect of what I am trying to do here with Graph Theory. </div><div><br></div><div>My last 2 options were to either </div><div><br></div><div>1. Create separate protocols for the different types of graphs but there&#39;s many types so I would be writing a lot of redundant code. </div><div><br></div><div>2. Leaving it how it is. Inserting an enum &quot;TypeOfGraph&quot; for the different types of graphs and then computing its type with the help of the different initializer methods. </div><div><br></div><div></div><div><br></div><div><br></div><div>-- <br></div><div><div class="gmail_signature"><div dir="ltr">Best Regards,<div><br></div><div>Muhammad T. Vali</div></div></div>
</div></div>