Подтвердить что ты не робот

Быстрый эквивалент Java.toString()

Что такое Swift-эквивалент Java.toString() для печати состояния экземпляра класса?

4b9b3361

Ответ 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))