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

Reply via email to