What about #Self in protocols? I.e. is it proposed to have #Self in protocols, where conformance will require a substitution by real type name?

protocol A {
    func a() -> Self
    func b(c: Self) // b(c: #Self)   ?
}

class C: A {
    func a() -> Self { return self }
    func b(c: C) {} // b(c: #Self) ?
}


protocol A2 {
    var a: Self {get}
}

final class C2 : A2 {
    var a: C2 { return C2() } // #Self { return #Self() }  ?
}

On 10.05.2016 17:50, Erica Sadun via swift-evolution wrote:
As a compile-time substitution, it could be used in any and all of the
examples in your bullet list as a literal text replacement..

Quick rundown:

struct A {
   ...#Self... // #Self is substituted by A
}

class B {
    ...#Self... // Self is substituted by B
}

class C {
   ... #Self... // Self is substituted by C, which is the defining type at
compile time
}

I'm stepping away from endorsing or pushing this forward. If you want to
pick this up and run with it, it's yours.

-- E


On May 10, 2016, at 8:34 AM, Matthew Johnson <[email protected]
<mailto:[email protected]>> wrote:

Can you clarify where would #Self would be allowed?

* property declarations
* method signatures
* method and computed property bodies
* all of the above

I would like to see this and allowed in all of the above.

We should also consider allowing this in protocol requirements.  It would
not covary like Self does for return types, instead being fixed by the
class that declares conformance.

Sent from my iPad

On May 10, 2016, at 8:15 AM, Erica Sadun via swift-evolution
<[email protected] <mailto:[email protected]>> wrote:

To focus SE-0068 and narrow its scope, I removed the `#Self` part of the
proposal. This offered compile-time substitution of the defining type
for a related #Self literal:

    A further static identifier, |#Self| expands to static type of the
    code it appears within, completing the ways code may want to refer
    to the type it is declared in.

     *

        |#Self| expands to the static type of the code it is declared
        within. In value types, this is always the same as |Self|. In
        reference types, it refers to the declaring type. |#Self| will
        offer a literal textual replacement just like |#file|, etc.

At Chris's suggestion, I'm starting a new SE thread to see whether there
remains any interest for including #Self in the language. I'm personally
happy with the SE-0068 outcome but I didn't want to undercut anyone like
Timothy Wood who had originally spoken up for its inclusion.

-- E

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



_______________________________________________
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

Reply via email to