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.

On Tue, Jul 25, 2017 at 5:13 PM, Niels Andriesse <andriesseni...@gmail.com>
wrote:

> Although I have come across this problem as well (particularly when
> initializing from JSON), I don'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.
>
> On Wed, 26 Jul 2017 at 02:30 Taylor Swift via swift-evolution <
> swift-evolution@swift.org> wrote:
>
>> I’d be in favor of this.
>>
>> On Tue, Jul 25, 2017 at 5:44 AM, philohan95 via swift-evolution <
>> swift-evolution@swift.org> wrote:
>>
>>> 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.
>>>
>>> The current way:
>>>
>>> ```
>>> let someProperty: Any
>>> let anotherProperty: Any
>>>
>>> init?(data: [String: Any]) {
>>>         guard
>>>                 let someProperty = data["some_key"],
>>>                 let anotherProperty = data["another_key"]
>>>         else {
>>>                 return nil
>>>         }
>>>
>>>         self. someProperty = someProperty
>>>         self. anotherProperty = anotherProperty
>>> }
>>> ```
>>>
>>> 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.
>>>
>>> My idea is extending the power of the `guard` statement
>>>
>>> Idea:
>>>         init?(data: [String: Any]) {
>>>                 guard
>>>                         someProperty = data["some_key"], // Currently
>>> fails because `self` us used before all stored properties are initialized
>>>                         anotherProperty = data["another_key"]
>>>                 else {
>>>                         return nil
>>>                 }
>>>         }
>>> }
>>>
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>>
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to