Swift equivalent of Java toString()
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 = 12print(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
)
If it is possible to use the struct instead of class, then nothing additional to do.
struct just prints fine itself to the output
print("\(yourStructInstance)")
or with class like this:
print(String(describing: yourClassInstance))
You should use String(obj)
.
Direct from the documentation for CustomStringConvertible:
NOTE
String(instance) will work for an instance of any type, returning its description if the instance happens to be CustomStringConvertible. Using CustomStringConvertible as a generic constraint, or accessing a conforming type's description directly, is therefore discouraged.