> On 30 Mar 2017, at 18:07, Ross O'Brien via swift-evolution 
> <[email protected]> wrote:
> 
> 


> It has become an idiom of Swift to declare an extension to a type for each 
> protocol we want it to conform to, for reasons of code organisation and 
> readability. This can be true even if conformance to the protocol was a 
> primary intent of creating the type in the first place.

But this is only a convention. It’s not a compiler error to declare protocol 
conformance on the min type definition and it is not wrong to declare 
conformance on the main type definition.

> 

> Suppose we created a 'conformance region' inside a type declaration - a scope 
> nested within the type declaration scope - and that this conformance region 
> had its own access level. It's inside the type declaration, not separate from 
> it like an extension, so we can declare properties inside it. But literally 
> the only properties and functions declared inside the region but visible 
> anywhere outside of it, would be properties and functions declared in the 
> named protocol being conformed to.
> 
> So, visually it might look like this:
> 
> struct Foo
> {
>   conformance Bar // or conformance Foo : Bar, but since the region is inside 
> Foo that's redundant
>   {
>     var integer : Int // visible because Foo : Bar, at Bar's access level
> 
>     var counter : Int = 0 // only visible inside the conformance scope, 
> because not declared in Bar
> 
>     func increment() // visible because Foo : Bar, at Bar's access level
>     {
>       counter += 1
>     }
>   }
> }

Here is a problem with the above. Suppose you hadn’t helpfully annotated each 
of the vars with a comment telling us where it is visible, a reader couldn’t 
tell at a glance what the visibility of each var is without looking it up in 
the protocol.

> 

IMO this adds a lot of unnecessary complexity in order to offer language 
support for one particular way of laying out your code. 

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to