[swift-evolution] Idea: Properties in Failable Initializers less verbose
Manuel Carrasco Molina
manuel at carrascomolina.com
Tue Jul 25 12:30:26 CDT 2017
+1.
> On 25. Jul 2017, at 18:30, Taylor Swift via swift-evolution <swift-evolution at 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 at swift.org <mailto:swift-evolution at 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 at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170725/60fffce6/attachment.html>
More information about the swift-evolution
mailing list