Що таке Swift-еквівалент Java toString()для друку стану екземпляра класу?
Що таке Swift-еквівалент Java toString()для друку стану екземпляра класу?
Відповіді:
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)
String(obj)?
.debugDescriptionбільш зручна для програмістів версія
Ви повинні використовувати String(obj).
Безпосередньо з документації для CustomStringConvertible :
ПРИМІТКА
Рядок (екземпляр) буде працювати для екземпляра будь-якого типу, повертаючи його опис, якщо екземпляр є CustomStringConvertible. Тому не рекомендується використовувати CustomStringConvertible як загальне обмеження або отримувати безпосередній доступ до опису відповідного типу.
description()методу CustomStringConvertibleбуде достатньо.
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 library" .
Або, щоб вам було простіше зрозуміти, ваш клас і descriptionметод повинні виглядати наступним чином:
public class MyClass: NSObject {
public var memberAttribute = "I'm an attribute"
public override var description: String {
return "My Class member: \(self.memberAttribute)"
}
}
Примітка:
Оскільки ви розширюєте свій клас Modal, NSObjectвін більше не вимагає, щоб ваш клас відповідав CustomStringConvertibleкласу, і ви перевизначаєте descriptionзмінну з самого NSObjectкласу. Завжди пам’ятайте, CustomStringConvertibleв основному це чистий швидкий спосіб досягнення цього.