<div dir="ltr">Thank you. This is a good suggestion, but does not fit the case. The `<span style="font-family:&#39;Helvetica Neue&#39;;font-size:13px">AccountAuthorizationControlle</span><span style="font-family:&#39;Helvetica Neue&#39;;font-size:13px">r` is an &quot;abstract&quot; class but it is not a &quot;dumb&quot; class. It store data, reference to injected class instances and do other important things. If I implement all of this as protocols I have to duplicate code here and there. I know I can use protocol extensions to provide default implementations. Even so, I&#39;ll have duplicate code.</span><div><span style="font-family:&#39;Helvetica Neue&#39;;font-size:13px"><br></span></div><div><font face="Helvetica Neue">Do not take me wrong, I really like protocols and structs and I understand how to use them, but it seems that many of us believe that the is something wrong with classes and the protocol/struct is the new Holy Grail. I disagree. New possibilites and new way to do things are always welcome, mainly if they are solid and consistent and really solves the problem intended to be solved.</font></div><div><font face="Helvetica Neue"><br></font></div><div><font face="Helvetica Neue">I also understand that the Swift team does not want to introduce any new keywords to the language. </font>To tell the truth I think I need to read again all the information on Swift. I thought the Swift would be one thing, but looks like it will be another. It is likely that the wrong one is me.</div><div><br></div><div>Provide ways to create abstract classes and abstract methods is not a &quot;keystroke saver&quot;. It is one of many concepts involved in OOP, IMHO.</div><div><br></div><div>-Van</div><div><br></div><div><font face="Helvetica Neue"><br></font></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 26, 2016 at 3:45 PM, Vinicius Vendramini <span dir="ltr">&lt;<a href="mailto:vinivendra@gmail.com" target="_blank">vinivendra@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>It seems like having a protocol restricted to instances of ‘<font face="Helvetica Neue">AccountAuthorizationController’ (as Brent suggested) would solve your problem, wouldn’t it?</font></div><div><font face="Helvetica Neue"><br></font></div><div><font face="Helvetica Neue">You could just add all method declarations that are supposed to be abstract to that protocol instead, and then make sure your subclasses implement the protocol - which means the compiler forces them to implement the abstract methods.</font></div><span class=""><div><br></div>
&gt; Currently I have in a private framework a class named `AccountAuthorizationController` with subclasses like `OAuthAccountAuthorizationController`, `OAuth2AccountAuthorizationController` and `WebFormAccountAuthorizationController` and so on.<br>&gt; <br>&gt; In the root &quot;abstract&quot; class I have methods without implementation where I have to use `fatalError()` to ensure that they will never been called. I cannot prevent the framework user to instantiate the `AccountAuthorizationController`, however.<br>&gt; <br>&gt; Look that this is only one example. I have other cases as well when I&#39;d like to have abstract classes and abstract methods.<br>&gt; <br></span>&gt; I know that structs and protocols are &quot;elegant, simple and powerful&quot; (as they seem to be all new frameworks and languages that pop up every day on the Internet) and the argumentsin favor of composition rather than inheritance. But I still would like to take advantage of the decades of available knowledge in object orientation in my projects.<span class=""><br>&gt; <br>&gt; +1 for abstract classes and abstract methods.<br>&gt; <br>&gt; -Van<br>&gt; <br></span><span class="">&gt; On Fri, Feb 26, 2016 at 12:46 PM, Evan Maloney via swift-evolution&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>(<a href="mailto:swift-evolution@swift.org" target="_blank">mailto:swift-evolution@swift.org</a>)&gt;wrote:<br>&gt; &gt; &gt;Well not exactly, if you want the same behaviors in subclasses of UIViewController and UITableViewController :<br>&gt; &gt; &gt;- with protocols + extensions, you write in once and apply it to each of your subclasses<br>&gt; &gt; &gt;- with abstract classes you have to write 2 abstract classes, one for direct UIViewController subclasses, one for UITableViewController subclasses<br>&gt; &gt; <br>&gt; &gt; That&#39;s a problem with class hierarchies in general, not with abstract classes.<br>&gt; &gt; <br>&gt; &gt; You can use the same argument to call for the removal of classes from Swift, which is why I think the fundamental question is, are classes intended to be first-class citizens in Swift?<br>&gt; &gt; _______________________________________________<br>&gt; &gt; swift-evolution mailing list<br></span>&gt; &gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>(<a href="mailto:swift-evolution@swift.org" target="_blank">mailto:swift-evolution@swift.org</a>)<br>&gt; &gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>&gt; <br>&gt; <br>&gt;<span> </span>

</div></blockquote></div><br></div>