Печать имени структуры в swift
Можно ли узнать имя структуры в swift? Я знаю, что это возможно для class
:
Пример
class Example {
var variable1 = "one"
var variable2 = "2"
}
напечатать это имя класса, я бы просто сделал:
NSStringFromClass(Example).componentsSeparatedByString(".").last!
но могу ли я сделать что-то подобное для struct
?
Пример
Если у меня есть struct
:
struct structExample {
var variable1 = "one"
var variable2 = "2"
}
как я могу получить имя structExample "этого struct
?
Спасибо.
Ответы
Ответ 1
Если вам нужно имя не instanciated struct, вы можете запросить его self
:
struct StructExample {
var variable1 = "one"
var variable2 = "2"
}
print(StructExample.self) // prints "StructExample"
Для экземпляра я бы использовал CustomStringConvertible и dynamicType:
struct StructExample: CustomStringConvertible {
var variable1 = "one"
var variable2 = "2"
var description: String {
return "\(self.dynamicType)"
}
}
print(StructExample()) // prints "StructExample"
Что касается Swift 3, self.dynamicType
был переименован в type(of: self)
для примера здесь.
Ответ 2
Чистая версия Swift работает для структур, как и для классов: fooobar.com/questions/219292/....
Если вы хотите работать с самим объектом типа:
let structName = "\(structExample.self)"
Если у вас есть экземпляр struct:
var myInstance = structExample()
let structName = "\(myInstance.dynamicType)"
Забавно, что возвращаемый объект Type не соответствует протоколу CustomStringConvertible. Следовательно, он не имеет свойства описания, хотя шаблон "все еще делает правильные вещи".
Ответ 3
print("\(String(describing: Self.self))")