Draft Proposal feedback welcome.
Currently to make a optional from a value the type name must be repeated:
let x = “Some Value”
let y : String? = x
This takes away some of the advantage of type inference because the very next line I must specify the type.
I propose the following syntax:
let y? = x
This binds a new optional y which wraps the same value of x. It follows the same conventions as var and let that currently exist in the language.
The advantages: this is easier to read, more compact, and lets type inference determine the type.
If let and other conditionals would not support this syntax and optionals of optionals is not supported. So let x?? = y would not result in an optional optional. Also if y was an optional it would not let you upgrade that.
## Detailed Design
let optionalValue? = value
This would not make sense in the if let, (guard let) context because if let unwraps the value, so this would be an error.
This should not conflict with pattern matching as that requires the case keyword.
Wrapping optional in an optional is an error.
## Impact on existing code
The current syntax will continue to exist so it will have no impact on existing code.
## Alternatives Considered