A type with a customized textual representation.


protocol CustomStringConvertible


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)
// 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))"

// Prints "(21, 30)"


Instance Properties

var description: String

A textual representation of this instance.

Required. Default implementations provided.


Conforming Types

See Also

String Representation

protocol LosslessStringConvertible

A type that can be represented as a string in a lossless, unambiguous way.

protocol CustomDebugStringConvertible

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