Печать имени структуры в 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))")