2016-04-13 2 views

ответ

53

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)

+0

Как насчет 'String (obj)'? – nielsbot

+0

Существует также '.debugDescription' для более удобной для программистов версии – nielsbot

+2

применительно к структурам? – lmiguelvargasf

6

Вы должны использовать String(obj).

Напрямую от the documentation for CustomStringConvertible:

ПРИМЕЧАНИЕ

String (экземпляр) будет работать для экземпляра любого типа, возвращая его описание если экземпляр случается CustomStringConvertible. Использование CustomStringConvertible в качестве общего ограничения или непосредственное обращение к описанию соответствующего типапоэтому не рекомендуется.

+0

Похоже, что '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' –

4

Если можно использовать структуру вместо класса, то ничего не нужно делать.

структура просто печатает отлично себя выход

print("\(yourStructInstance)") 

или с классом, как это:

print(String(describing: yourClassInstance)) 
Смежные вопросы