[swift-evolution] Proposal: Finalization in protocol extensions and default implementations

Matthew Johnson matthew at anandabits.com
Wed May 18 14:15:19 CDT 2016


> On May 18, 2016, at 12:53 PM, Adrian Zubarev via swift-evolution <swift-evolution at swift.org> wrote:
> 
> I’d like to revive this idea I posted long time ago. There is only one thing I need to update here:
>> protocol MagicType: class /* missed the class constraint */ {
>>       
>>     final var foo: Int { get }
>>     final func boo()
>> }
What benefit is there in defining a protocol requirement as final?

> What do you guys think? Is there any technical reason why this is not possible?
> -- 
> Adrian Zubarev
> Sent with Airmail
> 
> Am 5. Dezember 2015 bei 16:26:23, Adrian Zubarev (adrian.zubarev at devandartist.com <mailto:adrian.zubarev at devandartist.com>) schrieb:
> 
>> Hello there,
>> 
>> I wonder if it is a good idea to be able to finalize in protocols and default implementations.
>> 
>> Here is an example:
>> 
>> protocol MagicType {
>>       
>>     final var foo: Int { get }
>>     final func boo()
>> }
>> 
>> class X: MagicType {
>>       
>>     final var foo: Int {
>>           
>>         return 42
>>     }
>>       
>>     final func boo() {
>>           
>>         print("magic")
>>     }
>> }
>> 
>> class Y: X {
>>       
>>     // can't override func boo or var foo in here
>> }
>> 
>> //===================================================//
>> 
>> protocol SomeType {}
>> 
>> extension SomeType {
>>       
>>     final func foo() {
>>           
>>         print("Hello World")
>>     }
>> }
>> 
>> class A: SomeType {}
>> 
>> class B: SomeType {
>>       
>>     /* this should raise an error, because the class B shouldn't */
>>     /* be able to override that function from SomeType */   
>>       
>>     func foo() {
>>         // do something else   
>>     }
>> }
How do you anticipate this would interact with retroactive modeling of types which would conform the requirements of `SomeType` but also happen to have a `foo` method?

>> 
>> 
>> 
>>>> Regards Adrian
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160518/46577451/attachment.html>


More information about the swift-evolution mailing list