<div dir="ltr">This problem is not limited to JSON. I have scads of underscored variables and guard bindings in my code because of this limitation, though I rarely work with JSON.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 25, 2017 at 5:13 PM, Niels Andriesse <span dir="ltr">&lt;<a href="mailto:andriesseniels@gmail.com" target="_blank">andriesseniels@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Although I have come across this problem as well (particularly when initializing from JSON), I don&#39;t think the solution is to fundamentally change initialization behavior like this, because 1. ) that is probably going to break a good deal of existing code and 2. ) I think that the introduction of the Codable protocol in Swift 4 will eliminate most cases where this is really a problem.<div class="HOEnZb"><div class="h5"><br><div class="gmail_quote"><div dir="ltr">On Wed, 26 Jul 2017 at 02:30 Taylor Swift via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">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">I’d be in favor of this.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 25, 2017 at 5:44 AM, philohan95 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">I think the current way to initiate models in a Failable Initializer `init?()` is overly verbose and should be shortened down so less boilerplate should be needed.<br>
<br>
The current way:<br>
<br>
```<br>
let someProperty: Any<br>
let anotherProperty: Any<br>
<br>
init?(data: [String: Any]) {<br>
        guard<br>
                let someProperty = data[&quot;some_key&quot;],<br>
                let anotherProperty = data[&quot;another_key&quot;]<br>
        else {<br>
                return nil<br>
        }<br>
<br>
        self. someProperty = someProperty<br>
        self. anotherProperty = anotherProperty<br>
}<br>
```<br>
<br>
As you can see we had to use the properties twice (this would also be the case of `if let`) making the initializer twice as long as necessary and becomes a pain to implement when having more than 1 property.<br>
<br>
My idea is extending the power of the `guard` statement<br>
<br>
Idea:<br>
        init?(data: [String: Any]) {<br>
                guard<br>
                        someProperty = data[&quot;some_key&quot;], // Currently fails because `self` us used before all stored properties are initialized<br>
                        anotherProperty = data[&quot;another_key&quot;]<br>
                else {<br>
                        return nil<br>
                }<br>
        }<br>
}<br>
<br>
______________________________<wbr>_________________<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/<wbr>mailman/listinfo/swift-<wbr>evolution</a><br>
</blockquote></div><br></div>
______________________________<wbr>_________________<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/<wbr>mailman/listinfo/swift-<wbr>evolution</a><br>
</blockquote></div>
</div></div></blockquote></div><br></div>