> On Jul 11, 2015, at 6:29 PM, Roland King <r...@rols.org> wrote:
> 
>> 
>> However, Roland got it slightly wrong, according to the documentation. This:
>> 
>>      print (“\(myObj)”)
>> 
>> never uses debugDescription, only description. To use debugDescription (if 
>> it exists, or description instead):
>> 
>>      debugPrint (“\(myObj)”)
> 
> Dunno about the documentation - I’m remembering a WWDC video which said one 
> falls back to the other. So I tested it in a playground. \(variable) appears 
> to do as suggested, uses description if that exists, falls back to 
> debugDescription if it doesn’t and prints the class name if neither do. 
> 
> Surprisingly all debugPrint() does is not, as you might expect, use the 
> debugDescription in preference, but just puts quotes around the whole thing 
> and still uses description if it exists. That feels wrong. 
> 
> class IHaveNothing{}
> 
> class OnlyDebugPrintable : IHaveNothing, CustomDebugStringConvertible
> {
>       var debugDescription : String { return "I am 
> CustomDebugStringConvertible" }
> }
> 
> class HasTheLot : OnlyDebugPrintable, CustomStringConvertible
> {
>       var description : String { return "I have the lot" }
> }
> 
> 
> let a = IHaveNothing()
> let b = OnlyDebugPrintable()
> let c = HasTheLot()
> 
> print( "\(a)” )                               // IHaveNothing
> print( "\(b)” )                               // I am 
> CustomDebugStringConvertible
> print( "\(c)” )                               // I have the lot
> debugPrint( "\(a)” )                  // “IHaveNothing"
> debugPrint( "\(b)” )                  // “I am CustomDebugStringConvertible"
> debugPrint( "\(c)” )                  // “I have the lot"

Note that there is a distinction between "print an object" and "perform string 
interpolation on an object and print that string". 

    print(c)            // I have the lot
    print("\(c)")       // I have the lot
    debugPrint(c)       // I am CustomDebugStringConvertible
    debugPrint("\(c)")  // "I have the lot"

Note that (1) string interpolation prefers the non-debug description when 
available, and (2) debugPrint() of a String prints the quotes but print() of a 
String does not.


-- 
Greg Parker     gpar...@apple.com     Runtime Wrangler



_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to