[swift-evolution] allowing to specify optionality with type inference
Hugues Bernet-Rollande
hugues at xdev.fr
Thu Mar 24 05:46:19 CDT 2016
Oh my,
I totally miss this one.
The generic one is pretty cool too.
You think the `?` shortcut could still make sense?
let y: ? = 123
Thanks!
Hugues BERNET-ROLLANDE
> On Mar 24 2016, at 11:41 am, Andrew Bennett <cacoyi at gmail.com> wrote:
>
> Hi Huges,
>
>
>
> You can achieve a very similar result like this:
>
>
>
> let x = 123
>
> let y: Optional = x
>
>
>
> The generic arguments can be inferred in more complicated cases too, for
example:
>
>
>
> let z: Set = [1, 2, 3]
>
>
>
> Which creates a Set<Int> rather than an Array<Int>.
>
>
>
> I hope this helps!
>
> Andrew Bennett
>
>
>
>
>
> On Thu, Mar 24, 2016 at 9:22 PM, Hugues Bernet-Rollande via swift-evolution
<[swift-evolution at swift.org](mailto:swift-evolution at swift.org)> wrote:
>
>> In a strongly typed language, such as Swift is, type inference is greatly
appreciated as it declutter the instance type definition.
>>
>>
>>
>> For example, in the following statement, the compiler easily deduct the
type of `aString` by the return type of `String.init()`
>>
>>
>>
>> ```
>>
>> let aString = String()
>>
>> ```
>>
>>
>>
>> Optional are generic enum which can contain a value of a generic type or
nil (<https://github.com/apple/swift/blob/master/stdlib/public/core/Optional.s
wift>)
>>
>>
>>
>> Sometime you may want specify that the instance is of type optional in
which even if you are a the same time assigning a value to this instance.
>>
>> In which case you loose the type inference mechanism and you have to define
both (the optionality as well as the type).
>>
>> For example, you may want specify an optional String with a default value.
>>
>>
>>
>> ```
>>
>> var a:String? = String()
>>
>> // or
>>
>> var b = String() as String?
>>
>> // or
>>
>> var c:Optional<String> = String()
>>
>> ```
>>
>>
>>
>> But the compiler can already infer the variable type from this assignment,
it just miss the "optionality" of the variable.
>>
>> It would be nice to be able to express this.
>>
>>
>>
>> Then for, I propose the following syntax evolution:
>>
>>
>>
>> ```
>>
>> var a:? = String()
>>
>> // and/or (not recommended because more prone to typo and unclear...)
>>
>> var a = String() as?
>>
>> ```
>>
>>
>>
>> This would allow for more synthetic optional declaration.
>>
>>
>>
>> I've draft a proposal on my `swift-evolution` fork:
>>
>> <https://github.com/huguesbr/swift-evolution/blob/optionality-type-with-
type-inference/proposals/0057-optionality-type-with-type-inference.md>
>>
>>
>>
>> Let me know what you think.
>>
>>
>>
>>
>>
>> Hugues BERNET-ROLLANDE
>>
>>
>>
>> \--
>>
>> [hugues at xdev.fr](mailto:hugues at xdev.fr)
>>
>> <http://www.xdev.fr>
>>
>> <http://www.linkedin.com/in/huguesbr>
>>
>>
_______________________________________________
swift-evolution mailing list
[swift-evolution at swift.org](mailto: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/20160324/7f5b9e12/attachment.html>
More information about the swift-evolution
mailing list