[swift-evolution] Mark protocol methods with their protocol
Vladimir.S
svabox at gmail.com
Tue Sep 20 10:56:31 CDT 2016
On 20.09.2016 17:48, Martin Waitz wrote:
> Hello everybody,
>
> Several suggestions are floating around about explicitly marking a method
> to implement a protocol requirement.
>
> E.g.:
>
>> class Foo : Bar {
>> implement func foo() {...}
>> }
>
> However, with extensions we can already do something very similar:
Yes, I also mentioned it in one of the message. Personally I don't like
this solution but I do remember that someone from core team mentioned it.
It allows you to have 'safe' code and 'unsafe' - i.e. where you can be lazy
and don't provide more info for compiler and got later the problem with
protocol conformance we are discussing here; and you can have 'safe' code
in extension - where compiler will help you.
Then, shouldn't we disallow protocol conformance 'in-place' in type's
definition? So, if you need to conform to protocol - only extension is the
syntax for this. In this case I can understand the idea. Otherwise - can't.
So, if I want safe code this suggestion forces me to break my type's
definition to a number of extension blocks.
Right now there is a lot of code was written using 'in-place' conformance
and not related to protocol methods in extensions. I believe there will be
a lot of work to apply for new rules.
And if I have public methods/props *logically* related to implemented
methods of protocol - I'll have to keep them in 'main' definition or in
another extension.
Also what about marking default implementation methods in *protocol*
extension as was mentioned by Charles Srstka? I.e. in "extension P {...}"
>
> class Foo {
> ....
> }
> extension Foo: Bar {
> func foo() {...}
> }
>
> Maybe simply adding a new warning would already help.
> Extensions which introduce new protocol conformances could be reserved for
> those methods which are already defined within the protocol. Whenever such
> an extension contains an unrecognized method, we could issue a warning.
> Or maybe even an error, but we should allow private methods as an exception
> (for helper functions which are clearly not related to the protocol).
>
> This way, when the programmer wants to make sure that her new method is
> used by a protocol then she can simply put that method in an extension.
>
I wonder if *any* developer don't want to be sure the method she defined
exactly to implement protocol's requirement will be "used by a protocol".
Something like "I implemented this particular protocol's requirement in my
type... but.. you know, if something is changed in that protocol and
because of this the method will not play a role of implementation... not a
big problem, this is not very important code at all". :-)
More information about the swift-evolution
mailing list