This is now being tracked as https://bugs.swift.org/browse/SR-1882 
<https://bugs.swift.org/browse/SR-1882> - Chris (Lattner) thought this should 
not go through the official proposal process as something more complicated, but 
just add a warning with redundant parentheses around it silencing the warning 
(http://article.gmane.org/gmane.comp.lang.swift.evolution/20960 
<http://article.gmane.org/gmane.comp.lang.swift.evolution/20960>).

The latest version of the proposal (that's not going to happen) can be found 
here - https://gist.github.com/charlieMonroe/82e1519dd2b57029f69bc7abe99d7385 
<https://gist.github.com/charlieMonroe/82e1519dd2b57029f69bc7abe99d7385> - and 
I've implemented it for my own use here:

https://github.com/charlieMonroe/XUCore/blob/master/XUCore/additions/OptionalAdditions.swift
 
<https://github.com/charlieMonroe/XUCore/blob/master/XUCore/additions/OptionalAdditions.swift>

I find it better readable than using ?? or extra parentheses around the 
Optional...

> On Jul 4, 2016, at 5:31 PM, David Beck via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> > The string interpolation is one of the strong sides of Swift, but also one 
> > of its weaknesses.
> > 
> > It has happened to me more than once that I've used the interpolation with 
> > an optional by mistake and the result is then far from the expected result.
> > 
> > This happened mostly before Swift 2.0's guard expression, but has happened 
> > since as well.
> > 
> > The user will seldomly want to really get the output "Optional(something)", 
> > but is almost always expecting just "something". I believe this should be 
> > addressed by a warning to force the user to check the expression to prevent 
> > unwanted results. If you indeed want the output of an optional, it's almost 
> > always better to use the ?? operator and supply a null value placeholder, 
> > e.g. "\(myOptional ?? "<<none>>")", or use myOptional.debugDescription - 
> > which is a valid expression that will always return a non-optional value to 
> > force the current behavior.
> > 
> > Krystof
> > 
> > 
> >  
> 
> I really hope a proposal that solves this problem gets through, but I’m not 
> sure blocking optionals specifically is the way to go. In particular there 
> are other types that don’t have a clean string representation. I think that 
> by default string interpolation (meaning String creation specifically) should 
> only accept ValuePreservingStringConvertible types and produce an error for 
> everything else.
> 
> But, in addition, we need a way to quickly print out values for debugging. I 
> think a new string type (DebugString for example) would be useful for this. 
> print and similar functions could take that as an argument and any type could 
> be interpolated in it’s argument. Further, if you simply say `let a = 
> “\(something)”` and something isn’t ValuePreservingStringConvertible, the 
> type of a should then be DebugString. Converting to string should be strait 
> forward, but require a small step to make it obvious that you are using a 
> string that could have weird characters.
> 
> David Beck
> http://davidbeck.co <http://davidbeck.co/>
> http://twitter.com/davbeck <http://twitter.com/davbeck>
> http://facebook.com/davbeck <http://facebook.com/davbeck>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

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

Reply via email to