[swift-evolution] Proposal: Add @requires_super attribute

Vester Gottfried vester.gottfried at gmail.com
Wed Dec 16 11:25:23 CST 2015


I would suggest that @requires_super only checks if a call to super is
present at all. More detailed behaviour should be part of the functions
documentation, because I think all possibilities cannot be checked easily
by the compiler. For example a call to super my be required to happen early
or late inside the function. But when too early or too late is can probably
not been forseen by the compiler.

On Wed, Dec 16, 2015 at 5:46 PM, Marc Knaup <marc at knaup.koeln> wrote:

> +1 always had such issues with UIViewController's lifecycle methods.
>
> But edge cases need to be considered like "throws" for example.
> Do I need to call super before I throw something?
>
> On Wed, Dec 16, 2015 at 5:41 PM, Matthew Johnson via swift-evolution <
> swift-evolution at swift.org> wrote:
>
>> +1 to this.  Anything that helps ensure inheritance is thought through
>> carefully and used correctly is a win.
>>
>> On Dec 16, 2015, at 10:32 AM, Vester Gottfried via swift-evolution <
>> swift-evolution at swift.org> wrote:
>>
>> Some class based libraries/frameworks expect the consumer to subclass
>> certain classes and override specific method and require that the super
>> implementation of an overridden method is being called.
>>
>> Not calling the super implementation is a common source of bugs that may
>> be prevented if the compiler checks if super is called, like it does in
>> some cases of init().
>>
>> Example:
>>
>> class Box {
>>    @requires_super
>>     func addStuff() { ... }
>> }
>>
>> Overriding class Box's addStuff without calling super.addStuff() should
>> result in an error
>>
>> class Chest : Box {
>>     override addStuff() {
>>          // ERROR: addStuff() requires call to super.addStuff()
>>         ...
>>     }
>> }
>>
>> Objective-C developers know this as NS_REQUIRES_SUPER and I think its
>> worth thinking about adapting it.
>>
>> I hope my proposal was clear and thanks for reading,
>>
>> Gottfried
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>>
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151216/b51e2e24/attachment.html>


More information about the swift-evolution mailing list