<div dir="ltr"><pre style="white-space:pre-wrap;color:rgb(0,0,0)"><font face="arial, helvetica, sans-serif">+1 that I find .self confusing. This would only apply for classes, </font><span style="font-family:arial,helvetica,sans-serif">structs, </span><span style="font-family:arial,helvetica,sans-serif">protocols and enums, right? What about this: </span></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)"><font face="monospace, monospace">ClassType.class</font></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)"><pre style="white-space:pre-wrap"><font face="monospace, monospace">StructType.struct</font></pre><pre style="white-space:pre-wrap"><font face="monospace, monospace">ProtocolType.protocol</font></pre></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)"><font face="monospace, monospace">EnumType.enum</font></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)"><font face="arial, helvetica, sans-serif">None of those are likely to be used as actual properties anywhere. They would be pretty safe keywords to reserve.</font></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)">&gt;<i> On Dec 15, 2015, at 1:24 PM, Jordan Rose &lt;<a href="https://lists.swift.org/mailman/listinfo/swift-evolution">jordan_rose at apple.com</a>&gt; wrote:
</i>&gt;<i> 
</i>&gt;<i> &quot;.self&quot; was chosen for a few reasons:
</i>&gt;<i> 
</i>&gt;<i> - The obvious choice was &quot;.class&quot;, given precedent in Objective-C and Java, but not all types are classes.
</i>&gt;<i> - &#39;type&#39; is a very common property name, so we have tried very hard to avoid taking it as a general keyword.
</i>&gt;<i> - &#39;type&#39; also always implies going up a level. &quot;obj.dynamicType&quot; gives you back the type of &#39;obj&#39;, so wouldn&#39;t &quot;SomeClass.type&quot; give you back the metaclass &lt;<a href="http://sealiesoftware.com/blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html">http://sealiesoftware.com/blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html</a>&gt;? (Alternately, &quot;SomeType.staticType&#39; not being the same as &#39;SomeType.dynamicType&quot; seems weird.)
</i>&gt;<i> - &#39;self&#39; is already a keyword.
</i>&gt;<i> - &quot;.self&quot; actually works in Objective-C as well.
</i>&gt;<i> - &quot;.self&quot; currently also applies to instances, doing exactly what you think it does. This is nearly useless. In theory you could use it to unwrap one level of optionality (&quot;doubleOpt?.self&quot;) but that doesn&#39;t actually work today.
</i>&gt;<i> 
</i>&gt;<i> I read &quot;SomeType.self&quot; as &quot;SomeType itself, rather than an instance of it (or associated type)&quot;.
</i>&gt;<i> 
</i>&gt;<i> (And before someone brings it up, we chose not to just allow &quot;SomeType&quot; on its own because &quot;let x = SomeType&quot; is a likely typo for &quot;let x: SomeType&quot;.)
</i>&gt;<i> 
</i>&gt;<i> I think coming up with a clearer name is possible here, but there&#39;s plenty to consider. Still, certainly a reasonable thing to bring up.
</i>&gt;<i> 
</i>&gt;<i> Best,
</i>&gt;<i> Jordan
</i>&gt;<i> 
</i>&gt;&gt;<i> On Dec 15, 2015, at 8:42 , Brandon Knope via swift-evolution &lt;<a href="https://lists.swift.org/mailman/listinfo/swift-evolution">swift-evolution at swift.org</a> &lt;mailto:<a href="https://lists.swift.org/mailman/listinfo/swift-evolution">swift-evolution at swift.org</a>&gt;&gt; wrote:
</i>&gt;&gt;<i> 
</i>&gt;&gt;<i> Doh! staticType is the obvious choice!
</i>&gt;&gt;<i> 
</i>&gt;&gt;<i> I agree that adding more keywords can be bad, but in this case I think the clarity outweighs any downside:
</i>&gt;&gt;<i> 
</i>&gt;&gt;<i> SomeType.staticType
</i>&gt;&gt;<i> SomeType.self 
</i>&gt;&gt;<i> 
</i>&gt;&gt;<i> To me (and I&#39;m sure many others) one is vastly more obvious and easier to understand. 
</i>&gt;&gt;<i> 
</i>&gt;&gt;<i> I still don&#39;t really understand what SomeType.self is trying to convey upon first glance
</i>&gt;&gt;<i> 
</i>&gt;&gt;<i> Brandon 
</i>&gt;&gt;<i> 
</i>&gt;&gt;<i> Sent from my iPad
</i>&gt;&gt;<i> 
</i>&gt;&gt;<i> On Dec 15, 2015, at 11:34 AM, Dennis Lysenko &lt;<a href="https://lists.swift.org/mailman/listinfo/swift-evolution">dennis.s.lysenko at gmail.com</a> &lt;mailto:<a href="https://lists.swift.org/mailman/listinfo/swift-evolution">dennis.s.lysenko at gmail.com</a>&gt;&gt; wrote:
</i>&gt;&gt;<i> 
</i>&gt;&gt;&gt;<i> +1. Side effects can be eliminated through code migration if a suitable property name is chosen. Perhaps `staticType` to continue in the vein of `dynamicType`? 
</i>&gt;&gt;&gt;<i> 
</i>&gt;&gt;&gt;<i> Main detractor is that creating more keywords isn&#39;t necessarily a good thing.
</i>&gt;&gt;&gt;<i> 
</i>&gt;&gt;&gt;<i> On Tue, Dec 15, 2015 at 11:19 AM Brandon Knope via swift-evolution &lt;<a href="https://lists.swift.org/mailman/listinfo/swift-evolution">swift-evolution at swift.org</a> &lt;mailto:<a href="https://lists.swift.org/mailman/listinfo/swift-evolution">swift-evolution at swift.org</a>&gt;&gt; wrote:
</i>&gt;&gt;&gt;<i> One area of swift that is really not clear to me is when you want to use the type of a class, struct, enum, etc as a value. 
</i>&gt;&gt;&gt;<i> 
</i>&gt;&gt;&gt;<i> Metatyping is explained here: <a href="https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html#//apple_ref/doc/uid/TP40014097-CH31-XID_1022">https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html#//apple_ref/doc/uid/TP40014097-CH31-XID_1022</a> &lt;<a href="https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html#//apple_ref/doc/uid/TP40014097-CH31-XID_1022">https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html#//apple_ref/doc/uid/TP40014097-CH31-XID_1022</a>&gt;
</i>&gt;&gt;&gt;<i> 
</i>&gt;&gt;&gt;<i> Example: 
</i>&gt;&gt;&gt;<i> let metatype: SomeClass.Type = SomeClass.self
</i>&gt;&gt;&gt;<i> 
</i>&gt;&gt;&gt;<i> Is there a reason why this isn&#39;t SomeClass.type? Everywhere in the document this is explained as returning the type yet it&#39;s using a postfix self to access the type. 
</i>&gt;&gt;&gt;<i> 
</i>&gt;&gt;&gt;<i> I propose changing the postfix self to something more obvious like &quot;type&quot;
</i>&gt;&gt;&gt;<i> 
</i>&gt;&gt;&gt;<i> Going back to the example:
</i>&gt;&gt;&gt;<i> let metatype: SomeClass.Type = SomeClass.type
</i>&gt;&gt;&gt;<i> 
</i>&gt;&gt;&gt;<i> Several reasons why I think this is better:
</i>&gt;&gt;&gt;<i> 1. Postfix self is not obvious as an option as you never see a postfix self anywhere else 
</i>&gt;&gt;&gt;<i> 2. &quot;self&quot; does not clearly explain that the type is being returned 
</i>&gt;&gt;&gt;<i> 3. ObjC programmers are familiar with accessing the class type by sending the &quot;class&quot; method to the class type. In this case it needs to work on structs and enums, so a &quot;type&quot; method would make more sense. 
</i>&gt;&gt;&gt;<i> 4. Instances have a dynamicType method. For consistency, classes, structs, etc., should have a type method
</i>&gt;&gt;&gt;<i> 
</i>&gt;&gt;&gt;<i> Any other suggestions would be welcome. 
</i>&gt;&gt;&gt;<i> 
</i>&gt;&gt;&gt;<i> Brandon 
</i>&gt;&gt;&gt;<i> 
</i>&gt;&gt;&gt;<i> Sent from my iPad
</i>&gt;&gt;&gt;<i> 
</i>&gt;&gt;&gt;<i> _______________________________________________
</i>&gt;&gt;&gt;<i> swift-evolution mailing list
</i>&gt;&gt;&gt;<i> <a href="https://lists.swift.org/mailman/listinfo/swift-evolution">swift-evolution at swift.org</a> &lt;mailto:<a href="https://lists.swift.org/mailman/listinfo/swift-evolution">swift-evolution at swift.org</a>&gt;
</i>&gt;&gt;&gt;<i> <a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a> &lt;<a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a>&gt;
</i>&gt;&gt;<i>  _______________________________________________
</i>&gt;&gt;<i> swift-evolution mailing list
</i>&gt;&gt;<i> <a href="https://lists.swift.org/mailman/listinfo/swift-evolution">swift-evolution at swift.org</a> &lt;mailto:<a href="https://lists.swift.org/mailman/listinfo/swift-evolution">swift-evolution at swift.org</a>&gt;
</i>&gt;&gt;<i> <a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a> &lt;<a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a>&gt;</i></pre></div>