descriptionСвойство это то , что вы ищете. Это свойство, доступ к которому осуществляется при печати переменной, содержащей объект.
Вы можете добавить descriptionв свои собственные классы, приняв протокол CustomStringConvertibleи затем реализовав descriptionсвойство.
classMyClass: CustomStringConvertible{
var val = 17publicvar description: String { return"MyClass: \(val)" }
}
let myobj = MyClass()
myobj.val = 12print(myobj) // "MyClass: 12"
descriptionтакже используется при вызове Stringконструктора:
let str = String(myobj) // str == "MyClass: 12"
Это рекомендуемый метод для доступа к описанию экземпляра (в отличие от того, myobj.descriptionкоторый не будет работать, если класс не реализует CustomStringConvertible)
String (instance) будет работать для экземпляра любого типа, возвращая его описание, если это экземпляр CustomStringConvertible. Поэтому использование CustomStringConvertible в качестве общего ограничения или прямой доступ к описанию соответствующего типа не рекомендуется.
Или, чтобы вам было проще понять, ваш класс и descriptionметод должны выглядеть следующим образом:
publicclassMyClass: NSObject{
publicvar memberAttribute = "I'm an attribute"publicoverridevar description: String {
return"My Class member: \(self.memberAttribute)"
}
}
Примечание.
Поскольку вы расширяете свой модальный класс, от NSObjectнего больше не требуется, чтобы ваш класс соответствовал CustomStringConvertibleклассу, и вы переопределяете descriptionпеременную из самого NSObjectкласса. Всегда помните, что CustomStringConvertibleэто в основном чистый способ Swift.
Ответы:
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
более удобная для программистов версияЕсли можно использовать структуру вместо класса, то делать больше нечего.
struct просто отлично выводит себя на вывод
print("\(yourStructInstance)")
или с таким классом:
print(String(describing: yourClassInstance))
источник
Вам следует использовать
String(obj)
.Прямо из документации для 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» .Или, чтобы вам было проще понять, ваш класс и
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.источник