> On Oct 4, 2016, at 10:29 AM, Kevin Ballard via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> On Tue, Oct 4, 2016, at 10:28 AM, Nate Cook wrote:
>>> On Oct 3, 2016, at 5:49 PM, Kevin Ballard via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>> On Mon, Oct 3, 2016, at 03:18 PM, Jordan Rose wrote:
>>>>> 
>>>>> ...
>>>>> 
>>>> We had this at one point, but we took it out because people would forget 
>>>> to test the nil case. I think `?? ""` or `?? nil` really is the best 
>>>> answer here.
>>> 
>>> But you can't write that, unless you're dealing specifically with an 
>>> Optional<String>.  If you try you'll get an error:
>>> 
>>> unnamed.swift:2:19: error: binary operator '??' cannot be applied to 
>>> operands of type 'Int?' and 'String'
>>>     print("x: \(x ?? "nil")")
>>>                 ~ ^  ~~~~~
>>> unnamed.swift:2:19: note: overloads for '??' exist with these partially 
>>> matching parameter lists: (T?, @autoclosure () throws -> T), (T?, 
>>> @autoclosure () thro
>>> ws -> T?)
>>>     print("x: \(x ?? "nil")")
>>>                   ^
>>> This leads to writing code like "… \(x.map(String.init(describing:)) ?? 
>>> "nil")" which is pretty gross.
>> 
>> I think that if we're going to add this warning we should make it possible 
>> to provide a string as an alternative. It seems like it should be possible 
>> to build a ?? operator with a (T?, String) -> _StringInterpolationSomething 
>> signature that works only in a string interpolation context.
>> 
>> There are some types that aren't trivially constructible, or don't have 
>> clear alternatives for the nil case. Other times it might just not make 
>> sense to build a new instance simply to turn it into a string. If we're 
>> going to make people provide an alternative for optionals in this otherwise 
>> simple-to-use construct, let's make it simple to do so.
>> 
>> This is undoubtedly a more complex approach that could be considered 
>> separately, but I think it would be a valuable part of how developers could 
>> transition their code.

That’s definitely more complex, and seems like a completely orthogonal feature 
request.

> I like this idea. This combined with the warning for naively interpolating an 
> Optional would be a good solution, because now when I see the warning I can 
> trivially solve it with `?? "nil”`.

If you can suppress the warning with `as T?` (where T? is the type of the thing 
being warned on), you wouldn’t need a form that specifically printed “nil”, 
correct?

Mark

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to