[swift-evolution] two protocols with the same method name

Wallacy wallacyf at gmail.com
Fri Jan 8 21:47:11 CST 2016


Storage properties on protocol or in extension plus something when call
maybe a solution:

       protocol Marriageable {
               var foo:Int = 0; // actual a var.
                var ring: String? // actual a var.
        }
        protocol CallReceivable {
                var ring: String? // actual a var.
        }

        struct Person: Marriageable, CallReceivable { }

OR
        protocol Marriageable {
                var ring: String? { get set }
        }
        protocol CallReceivable {
                var ring: String? { get set }
        }

        struct Person { }

       extension Person: Marriageable{
         var ring: String?
       }

     extension Person: CallReceivable{
         var ring: String?
       }

So:

var person = Person()
person.foo = 1 // ok

person.ring = getRingtone() // error, ring is ambiguous
(person as CallReceivable).ring = getRingtone()  // ok
OR
person.CallReceivable.ring = getRingtone()  // ok | CallReceivable is a
know person protocol, so can get a implicity dot notation,
like .dynamicType.staticMethod();

Anyway, it's not an easy problem to solve.

Em sáb, 9 de jan de 2016 às 01:09, Brent Royal-Gordon via swift-evolution <
swift-evolution at swift.org> escreveu:

> > I don’t really get what you are driving at.
>
> The point is that, although `A` and `B` both require properties with the
> same name, they expect different semantics from that property. Let's maybe
> give these more concrete names so you can understand the idea:
>
>         protocol Marriageable {
>                 var ring: String? { get set }   // File name of image of
> this person's wedding ring.
>         }
>         protocol CallReceivable {
>                 var ring: String? { get set }   // File name of ringtone
> to be used for this person.
>         }
>
>         struct Person: Marriageable, CallReceivable {
>                 var ring: String?
>         }
>
> Of course a person is marriageable and can this have "a ring", and of
> course you can also receive a call from them and they can thus have "a
> ring". But in reality, the "ring" that satisfies one of these things will
> not work for the other. If your best friend gets married and you add an
> image of the ring, then the next time your friend calls you, the phone
> ringing screen will try to play a JPEG as an MP3.
>
> The "ring" example is, of course, slightly contrived, but I'm sure you can
> imagine a similar problem with real names, where you end up using the same
> term for two different and incompatible things.
>
> What the OP is basically asking is, when Swift sees the same type
> conforming to Marriageable and CallReceivable, should it optimistically
> assume that the `ring` properties they both require are compatible and
> allow the code to pass through without comment? Or should it
> pessimistically assume that the `ring` properties are incompatible and emit
> a warning or error about them?
>
> --
> Brent Royal-Gordon
> Architechies
>
> _______________________________________________
> 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/20160109/9a8bef02/attachment.html>


More information about the swift-evolution mailing list