<div dir="ltr"><div>@Andrey</div><div><ul><li>Note that it should also be possible to create structs anonymously as they also can implement protocols.<br></li><li>Delegates are a bit tricky because they are usually retained weakly so the anonymous object would be deallocated immediately.<br></li><li>Also using &quot;<font face="monospace, monospace">class: XYZ {}</font>&quot; doesn&#39;t allow creating named objects like &quot;<font face="monospace, monospace">class object EmptyObject {}</font>&quot;.</li></ul></div><div><div>When talking about singletons people tend to first think at a very large scale and about abstraction, factories, testability and whatever.</div><div>It&#39;s the little things which capture my interest more, like <font face="monospace, monospace">NSNull</font> for example.</div><div><br></div><div><font face="monospace, monospace">class object NSNull {}</font></div><div><br></div><div>Or maybe a JSON Null:</div><div><br></div><div><font face="monospace, monospace">protocol JSONNode {}</font></div><div><font face="monospace, monospace">struct JSON {</font></div><div><font face="monospace, monospace">    struct object Null: </font><span style="font-family:monospace,monospace">JSONNode</span><font face="monospace, monospace"> {}</font></div><div><font face="monospace, monospace">    struct Bool { … } // not an object but a type</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    // …</font></div><div><font face="monospace, monospace">}<br></font><div><div><br></div><div>Now the interesting part about a singleton <font face="monospace, monospace">NSNull</font> (or the JSON one) is that it represents both, a type and an instance.</div><div><br></div><div><font face="monospace, monospace">array.append(NSNull)</font></div><div><br></div><div>Note that we cannot use a <font face="monospace, monospace">class</font> and call <font face="monospace, monospace">NSNull()</font> as this would create a new instance instead of returning the singleton instance.<br></div><div>We would have to make a silly workaround like <font face="monospace, monospace">NSNull.null</font><font face="arial, helvetica, sans-serif"> or </font><font face="monospace, monospace">NSNull.sharedInstance.</font></div><div><br></div><div>Examples for <font face="monospace, monospace">JSON.Null</font>:</div><div><br></div><div><font face="monospace, monospace">jsonArray.append(JSON.Null) // used as instance</font></div><div><div><font face="monospace, monospace"><br class="">if jsonNode is JSON.Null { // used as type</font></div><div><font face="monospace, monospace">   // …</font></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">let expectedJsonTypes: [JSONNode.Type] = [JSON.Null, JSON.Bool, …]</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">if jsonNode is JSON.Null { // used as type</font></div><div><font face="monospace, monospace">   // …</font></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace">if jsonNode == JSON.Null { // used as instance (assuming Equatable conformance)</font></div><div><font face="monospace, monospace">   // …</font></div><div><font face="monospace, monospace">}</font></div></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Dec 12, 2015 at 2:29 AM, Andrey Tarantsov 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:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">I think that anonymous classes got lost amongst all the singletonphobia here, and yet making an anonymous local delegate class is often helpful.<br>
<br>
Perhaps we don&#39;t need an additional keyword, though; something like this could work too:<br>
<br>
view.delegate = class: SomeDelegate {<br>
  ...<br>
}()<br>
<br>
or perhaps you want a slightly customized object:<br>
<br>
view = class: UITextField {<br>
  func canBecomeFirstResponder() -&gt; Bool { return false }<br>
}()<br>
<br>
Of course, we could just use a named local class, like others have pointed out, but unless you really want to name that thing (and the name would often be stupid), that&#39;s a just workaround for a lack of anonymous classes.<br>
<span class=""><font color="#888888"><br>
A.<br>
</font></span><div class=""><div class="h5"><br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">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></div></div></div></div></div>