Быстрый эквивалент Java toString()
Что такое Swift эквивалент Java toString()
напечатать состояние экземпляра класса?
4 ответа
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
)
Если есть возможность использовать структуру вместо класса, то ничего дополнительного делать не нужно.
struct просто печатает нормально на выходе
print("\(yourStructInstance)")
или с таким классом:
print(String(describing: yourClassInstance))
Как это делается с NSObject
расширенные классы
Если ваш модельный класс расширен от NSObject
, вы должны переопределить переменную description
следующее:
public override var description: String {
return "\n{\n index: \(self.index),\n"
+ " country: \(self.name),\n"
+ " isoCountryCode: \(self.isoCountryCode),\n"
+ " localeId: \(self.localeId),\n"
+ " flagImageName: \(self.flagImageName!)\n}"
}
Вы можете проверить, как я сделал это здесь, в Country
класс, в "CountryPicker iOS Swift библиотека".
Или, чтобы вам было проще понять, ваш класс и description
метод должен выглядеть следующим образом:
public class MyClass: NSObject {
public var memberAttribute = "I'm an attribute"
public override var description: String {
return "My Class member: \(self.memberAttribute)"
}
}
Примечание: так как вы расширяете свой модальный класс с NSObject
это не требует от вашего класса соблюдения CustomStringConvertible
класс больше, и вы переопределяете description
переменная из NSObject
сам класс. Всегда помни, CustomStringConvertible
это в основном чистый способ Swift для достижения этой цели.
Вы должны использовать String(obj)
,
Непосредственно из документации для CustomStringConvertible:
НОТА
String (instance) будет работать для экземпляра любого типа, возвращая его описание, если экземпляр оказался CustomStringConvertible. Поэтому использование CustomStringConvertible в качестве общего ограничения или прямой доступ к описанию соответствующего типа не рекомендуется.