CustomDebugStringConvertible

A type with a customized textual representation suitable for debugging purposes.

Swift provides a default debugging textual representation for any type. That default representation is used by the String(reflecting:) initializer and the debugPrint(_:) function for types that don't provide their own. To customize that representation, make your type conform to the CustomDebugStringConvertible protocol.

Because the String(reflecting:) initializer works for instances of any type, returning an instance's debugDescription if the value passed conforms to CustomDebugStringConvertible, accessing a type's debugDescription property directly or using CustomDebugStringConvertible as a generic constraint is discouraged.

Conforming to the CustomDebugStringConvertible Protocol

Add CustomDebugStringConvertible conformance to your custom types by defining a debugDescription property.

For example, this custom Point struct uses the default representation supplied by the standard library:

  • struct Point {
  •     let x: Int, y: Int
  • }
  •  
  • let p = Point(x: 21, y: 30)
  • print(String(reflecting: p))
  • // Prints "p: Point = {
  • //           x = 21
  • //           y = 30
  • //         }"

After adding CustomDebugStringConvertible conformance by implementing the debugDescription property, Point provides its own custom debugging representation.

  • extension Point: CustomDebugStringConvertible {
  •     var debugDescription: String {
  •         return "Point(x: \(x), y: \(y))"
  •     }
  • }
  •  
  • print(String(reflecting: p))
  • // Prints "Point(x: 21, y: 30)"

See Also: String.init<T>(reflecting: T), CustomStringConvertible

Inheritance View Protocol Hierarchy →
Import
  • import Swift

Instance Variables

var debugDescription: String Required

A textual representation of this instance, suitable for debugging.

Declaration

  • var debugDescription: String { get }