CustomStringConvertible

A type with a customized textual representation.

Types that conform to the CustomStringConvertible protocol can provide their own representation to be used when converting an instance to a string. The String(describing:) initializer is the preferred way to convert an instance of any type to a string. If the passed instance conforms to CustomStringConvertible, the String(describing:) initializer and the print(_:) function use the instance's custom description property.

Accessing a type's description property directly or using CustomStringConvertible as a generic constraint is discouraged.

Conforming to the CustomStringConvertible Protocol

Add CustomStringConvertible conformance to your custom types by defining a description 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(p)
  • // Prints "Point(x: 21, y: 30)"

After implementing the description property and declaring CustomStringConvertible conformance, the Point type provides its own custom representation.

  • extension Point: CustomStringConvertible {
  •     var description: String {
  •         return "(\(x), \(y))"
  •     }
  • }
  •  
  • print(p)
  • // Prints "(21, 30)"
Inheritance View Protocol Hierarchy →
Import
  • import Swift

Instance Variables

var description: String Required

A textual representation of this instance.

Calling this property directly is discouraged. Instead, convert an instance of any type to a string by using the String(describing:) initializer. This initializer works with any type, and uses the custom description property for types that conform to CustomStringConvertible:

  • struct Point: CustomStringConvertible {
  •     let x: Int, y: Int
  •  
  •     var description: String {
  •         return "(\(x), \(y))"
  •     }
  • }
  •  
  • let p = Point(x: 21, y: 30)
  • let s = String(describing: p)
  • print(s)
  • // Prints "(21, 30)"

The conversion of p to a string in the assignment to s uses the Point type's description property.

Declaration

  • var description: String { get }