<div dir="ltr">Hey guys,<div><br></div><div>I am working on a proposal which touches (and could even partially depend on) another interesting concept which I think would be a great addition for Swift.</div><div><br></div><div>Object declarations could be a way to declare a class or struct with exactly one instance. They are perfect for singletons, anonymous subclasses and to anonymously implement a protocol.</div><div><br></div><div>Here some examples how it could look like:</div><div><br></div><div><font face="monospace, monospace">// singleton</font></div><div><font face="monospace, monospace">object GlobalResource {</font></div><div><font face="monospace, monospace">    func doSomething() { … }</font></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">let resource = GlobalResource</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">// could all be the same</font></div><div><font face="monospace, monospace">resource.doSomething()</font></div><div><font face="monospace, monospace">GlobalResource.doSomething()</font></div><div><font face="monospace, monospace">GlobalResource.Type.doSomething()</font></div><div><br></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">// anonymous subclass</font></div><div><font face="monospace, monospace">class ViewController: UIViewController {</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    override func loadView() {</font></div><div><font face="monospace, monospace">        view = object: UIView {</font></div><div><font face="monospace, monospace">            // configure view</font></div><div><font face="monospace, monospace">        }</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"><br></font></div><div><font face="monospace, monospace">// anonymous protocol implementation</font></div><div><font face="monospace, monospace">protocol TapHandler {</font></div><div><font face="monospace, monospace">    func handleTap()</font></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">view.tapHandler = object: TapHandler {</font></div><div><font face="monospace, monospace">    func handleTap() {</font></div><div><font face="monospace, monospace">        // …</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><br></div><div>Kotlin is an example for a a modern language which uses this concept:</div><div><a href="https://kotlinlang.org/docs/reference/object-declarations.html">https://kotlinlang.org/docs/reference/object-declarations.html</a><br></div><div><br></div><div><br></div><div>What do you think about such an addition?</div></div>