> On Apr 5, 2016, at 3:02 PM, Erica Sadun <er...@ericasadun.com> wrote:
> 
> As the discussion seems to be quieting down, I've tried to summarize the 
> on-list discussion and distill it into a preliminary proposal draft. Please 
> let me know if this covers what you think it should or if I've entirely 
> missed the mark. (It wouldn't be the first time.)
> 
> Regards,  -- Erica
> 
> Adding a #Self literal to Swift
> 
>       • Proposal: SE-XXXX
>       • Author(s): Erica Sadun
>       • Status: TBD
>       • Review manager: TBD
> Introduction
> 
> This proposal introduces #Self, a new literal that expands to 
> self.dynamicType.
> 
> This proposal was discussed on the Swift Evolution list in the [Pitch] Adding 
> a Self type name shortcut for static member access thread.
> 
> Motivation
> 
> It is common in Swift to reference an instance's type, whether for accessing 
> a static member or passing a type for an unsafe bitcast, among other uses. At 
> this time, you can either fully specify a type by name or use 
> self.dynamicType to access an instance's dynamic runtime type as a value. 
> 
> struct MyStruct {
>     static func staticMethod() { ... }
>     func instanceMethod() {
>         MyStruct.staticMethod()
>         self.dynamicType.staticMethod()
>     }
> }
> 
>       • As type names grow large, readability suffers, for example 
> MyExtremelyLargeTypeName.staticMember
>       • Code using hardwired type names is less portable than code that 
> automatically knows its type.
>       • Renaming a type means updating any TypeName references in code.
>       • Using self.dynamicType fights against Swift's goals of concision and 
> clarity; it is both noisy and esoteric.
>       • self.dynamicType.classMember and TypeName.classMember may not be 
> synonyms in class types with non-final members.
>       • Joe Groff points out, Self inside a class scope already means "the 
> dynamic class of 'self'", not "the type this declaration statically appears 
> within...Swift ought to allow developers to utter Self in the bodies of class 
> methods. It would be consistent to extend that courtesy to value types, where 
> dynamic Self always matches the static type, from that principle"
> Detail Design
> 
> In this proposal, #Self expands to the dynamic type of self and only the 
> dynamic type of self. Joe Groff writes, "I don't think it's all that onerous 
> to have to write ClassName.foo if that's really what you specifically mean."

What you're describing should be spelled `Self`, IMO. I think Tim intended 
`#Self` to mean the *static* type the code is declared inside (which is the 
same as Self unless you're in a class).

-Joe

> Alternatives Considered
> 
> Not at this time
> 
> Acknowlegements
> 
> Thanks Sean Heber, Kevin Ballard, Joe Groff, Timothy Wood, Brent 
> Royal-Gordon, Andrey Tarantsov, Austin Zheng

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to