Right, sorry, I should have clarified. The scenario to be supported here is that the code for structs A, B, and C cannot be modified. They could be part of the stdlib, for example, or a closed-source third-party library.
On Thu, Apr 28, 2016 at 1:18 PM, Matthew Johnson <[email protected]> wrote: > > > Sent from my iPad > > On Apr 28, 2016, at 1:09 PM, Erica Sadun via swift-evolution < > [email protected]> wrote: > > Sorry, that's not my question, which doesn't involve protocols I don't > own. Let me restate. Given three types I don't own as follows: > > ``` > struct A : Frobnicate { > override required func frobnicate() { print("A") } // "A", or delete > to get default > } > struct B: Frobnicate { > override required func frobnicate() { print("B") } // "B", or delete > to get default > } > struct C: Frobnicate { } > ``` > > We can't add the keywords if the structs are defined in a module we import > but don't own. We are only declaring the conformance retroactively. The > ability to do this is a crucial aspect of generic programming. It isn't > yet clear how your proposal handles retroactive modeling. > > -- E > > > On Apr 28, 2016, at 11:48 AM, Xiaodi Wu <[email protected]> wrote: > > Sorry, that's not my question, which doesn't involve protocols I don't > own. Let me restate. Given three types I don't own as follows: > > ``` > struct A { > func frobnicate() { print("A") } > } > struct B { > func frobnicate() { print("B") } > } > struct C { } > ``` > > I want to conform them to a protocol of my own design, Frobnicatable, and > supply a default `frobnicate()`: > > ``` > protocol Frobnicatable { > func frobnicate() > } > extension Frobnicatable { > func frobnicate() { print("Default") } > } > extension A: Frobnicatable { } > extension B: Frobnicatable { } > extension C: Frobnicatable { } > > let c = C() > c.frobnicate() // "Default" > ``` > > (Yes, I realize there are issues regarding static and dynamic dispatch > that limit the utility of this particular example--let's leave those aside > for now.) > Where would I affix keywords such as `required` and `override` to make > this work after implementation of your proposal? > > > _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution > >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
