Что такое 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))