> 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://twitter.com/davbeck
http://facebook.com/davbeck

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

Reply via email to