I&#39;m confused by this explanation.Today, `type(of:)` is the new `.dynamicType`. Is this proposal suggesting a silent change so that it now returns the static type? If so, why (particularly when you explain that this is often *not* what you would want)?<br><br>I&#39;m also somewhat puzzled about the proposed design. This proposal explains that Subtype&lt;T&gt; should be a supertype of Type&lt;T&gt; and its subtypes. Why is a supertype named Subtype?<br><div class="gmail_quote"><div dir="ltr">On Thu, Sep 29, 2016 at 9:44 PM Nevin Brackett-Rozinsky via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">From Brent’s explanation, it sounds to me like “Type” and “StaticType” respectively would be more descriptive than “Subtype” and “Type” as proposed.</div><div dir="ltr"><div><br></div><div>Nevin</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 29, 2016 at 10:29 PM, Brent Royal-Gordon via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>&gt; On Sep 29, 2016, at 3:24 PM, Russ Bishop via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; Why would we not have type(of:) and subtype(of:)? Why would I want the Subtype&lt;T&gt; instead of the specific Type&lt;T&gt;?<br>
<br>
</span>Let&#39;s turn this around. Suppose you write:<br>
<br>
        let obj: NSObject = …<br>
        let ty = type(of: obj)<br>
<br>
What is `ty`? Well, it&#39;s a `Type&lt;NSObject&gt;`, and there&#39;s only one of those: `NSObject.self`. So there&#39;s only one possible instance that could be assigned to that variable.<br>
<br>
This is true in general: If `type(of:)` returns `Type&lt;T&gt;`, then it can only have one possible return value. In other words, the return value of `type(of:)` would always be the *static* type of the variable, not its dynamic type. There may be some narrow cases where that&#39;d be useful, but 99% of the time, you want `subtype(of:)` because you&#39;re trying to discover which of many dynamic subtypes of the static type you&#39;re actually dealing with. So most uses of `type(of:)` would probably be mistaken attempts to perform `subtype(of:)` instead.<br>
<span><br>
&gt; What is the rationale for losing the meta type relationships by having Type&lt;U&gt; not be a subtype of Type&lt;T&gt;?<br>
<br>
</span>The relationships aren&#39;t lost; they&#39;re just expressed through `Subtype`, not `Type`.<br>
<br>
Again, turn this around. `Subtype` is the normal thing that you&#39;ll want to use most of the time. `Type` is the weird thing whose existence is hard to explain. (One version of this proposal used `Type` for `Subtype` and `ExactType` for `Type` in order to imply that subtype is usually what you want, but some of the contributors weren&#39;t happy with that.)<br>
<br>
So, `Type` is the weird thing. Why does it exist? Two reasons:<br>
<br>
1. `Subtype&lt;T&gt;` only includes *inheritable* type members of `T`. `Type&lt;T&gt;` also includes *non-inheritable* members, particularly non-required initializers.<br>
<br>
2. It allows precise type matches: `subty is Subtype&lt;NSObject&gt;` would match for any subtype of `NSObject`, whereas `subty is Type&lt;NSObject&gt;` would only match for `NSObject` itself.<br>
<span><font color="#888888"><br>
--<br>
Brent Royal-Gordon<br>
Architechies<br>
</font></span><div><div><br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</div></div></blockquote></div><br></div>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div>