Что такое Swift-эквивалент Java.toString() для печати состояния экземпляра класса?
Быстрый эквивалент Java.toString()
Ответ 1
Свойство description - это то, что вы ищете. Это свойство, к которому обращаются при печати переменной, содержащей объект.
Вы можете добавить description в свои собственные классы, приняв протокол CustomStringConvertible, а затем реализуя свойство description.
class MyClass: CustomStringConvertible {
var val = 17
public var description: String { return "MyClass: \(val)" }
}
let myobj = MyClass()
myobj.val = 12
print(myobj) // "MyClass: 12"
description также используется, когда вы вызываете конструктор String:
let str = String(myobj) // str == "MyClass: 12"
Это рекомендуемый метод для доступа к описанию экземпляра (в отличие от myobj.description, который не будет работать, если класс не реализует CustomStringConvertible)
Ответ 2
Вы должны использовать String(obj).
Прямо из документация для CustomStringConvertible:
Примечание
String (instance) будет работать для экземпляра любого типа, возвращая его если экземпляр окажется CustomStringConvertible. Использование CustomStringConvertible в качестве общего ограничения или доступ к Соответствующее описание типа непосредственно, поэтому обескураживается.
Ответ 3
Если можно использовать структуру вместо класса, то ничего не нужно делать.
struct просто печатает на выходе
print("\(yourStructInstance)")
или с классом, подобным этому:
print(String(describing: yourClassInstance))