2016-01-29 16 views
11

Możliwe jest poznanie nazwy struktury w szybkim tempie? Wiem, że to jest możliwe class:Print Struct name in swift

Przykład

class Example { 
    var variable1 = "one" 
    var variable2 = "2" 
} 

drukowania tę nazwę klasy, chciałbym po prostu zrobić:

NSStringFromClass(Example).componentsSeparatedByString(".").last! 

ale mogę zrobić coś podobnego do struct?

Przykład

Jeśli mam struct:

struct structExample { 
    var variable1 = "one" 
    var variable2 = "2" 
} 

jak mogę uzyskać nazwę "structExample" tego struct?

Dzięki.

Odpowiedz

9

Jeśli potrzebujesz nazwę non instanciated struktury można prosić o Jego self:

struct StructExample { 
    var variable1 = "one" 
    var variable2 = "2" 
} 

print(StructExample.self) // prints "StructExample" 

Za przykład chciałbym użyć CustomStringConvertible i dynamicType:

struct StructExample: CustomStringConvertible { 
    var variable1 = "one" 
    var variable2 = "2" 
    var description: String { 
     return "\(self.dynamicType)" 
    } 
} 

print(StructExample()) // prints "StructExample" 

Odnośnie Swift 3 , self.dynamicType została przemianowana na type(of: self) dla przykładu tutaj.

6

Czysta wersja Swift działa dla struktur podobnie jak dla klas: https://stackoverflow.com/a/31050781/2203005.

Jeśli chcesz pracować na obiekcie typu sama:

let structName = "\(structExample.self)" 

Jeśli masz instancję struct:

var myInstance = structExample() 
let structName = "\(myInstance.dynamicType)" 

Funny wystarczająco obiekt zwrócony nie wydaje się zgodne protokół CustomStringConvertible. W związku z tym nie ma właściwości "opisowej", chociaż "" nadal dobrze działa.