[swift-evolution] Proposal Draft: Optional Upgrading Assignment.

Paul Ossenbruggen possen at gmail.com
Thu Feb 4 10:02:16 CST 2016


I did consider this but I think it would be too easy to accidentally upgrade an optional. When you may have been thinking you were dealing with an optional and you needed to chain them. 


> On Feb 4, 2016, at 7:45 AM, Jerome ALVES <j.alves at me.com> wrote:
> 
> Maybe allowing optional chaining here is the best option ?
> 
> let test = "Test" // String
> let testOrNil = test? // String?
> 
> - Jérôme
> 
> 
>> Le 4 févr. 2016 à 16:32, Paul Ossenbruggen via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> a écrit :
>> 
>> Just sugar for that, plus there is symmetry to this proposal, it is more discoverable, and it is more concise.
>> 
>> 
>>> On Feb 4, 2016, at 1:57 AM, Taras Zakharko <taras.zakharko at uzh.ch <mailto:taras.zakharko at uzh.ch>> wrote:
>>> 
>>> -1 from me
>>> 
>>>   let x = Optional(“Some Value”) 
>>> 
>>> does the job just fine, is very clean,  and I don’t see any reason to shorten it. 
>>> 
>>> — Taras
>>> 
>>> 
>>>> On 04 Feb 2016, at 10:33, Allen Ding via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>>> 
>>>> On Thu, Feb 4, 2016 at 4:28 PM, Paul Ossenbruggen via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>>> Draft Proposal feedback welcome.
>>>> 
>>>> ## Introduction
>>>> 
>>>> 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.
>>>> 
>>>> Any use case examples? I've been trying to figure out why is this needs fixing (I don't even see it as a problem).
>>>> 
>>>> 
>>>> ## Proposal
>>>> 
>>>> 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
>>>> 
>>>> The grammar: 
>>>> 
>>>> 	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
>>>> 
>>>> None. 
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> 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 <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 <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/20160204/cbd3db2c/attachment.html>


More information about the swift-evolution mailing list