Search code examples
iosswiftstringtostringcustomstringconvertible

Swift equivalent of Java toString()


What is the Swift equivalent of Java toString() to print the state of a class instance?


Solution

  • The description property is what you are looking for. This is the property that is accessed when you print a variable containing an object.

    You can add description to your own classes by adopting the protocol CustomStringConvertible and then implementing the description property.

    class MyClass: CustomStringConvertible {
        var val = 17
    
        public var description: String { return "MyClass: \(val)" }
    }
    
    let myobj = MyClass()
    myobj.val = 12
    print(myobj)  // "MyClass: 12"
    

    description is also used when you call the String constructor:

    let str = String(myobj)  // str == "MyClass: 12"
    

    This is the recommended method for accessing the instance description (as opposed to myobj.description which will not work if a class doesn't implement CustomStringConvertible)