2015-10-31 13 views
7

C'è un modo per ottenere un nome di tipo Swift come una stringa con il suo spazio dei nomi (o nome del framework)?Come ottenere un nome di tipo Swift come una stringa con il suo spazio dei nomi (o nome del framework)

Ad esempio, se Foo.framework ha una classe denominata Bar, desidero ottenere una stringa come "Foo.Bar".

Di seguito è riportato il nome della classe "Bar".

let barName1 = String(Bar.self)  // returns "Bar" 
let barName2 = "\(Bar.self)"   // returns "Bar" 
let barName3 = "\(Bar().dynamicType)" // returns "Bar" 

Vorrei anche ottenere il nome di struttura "Foo" come spazio dei nomi.

risposta

15

Uso String(reflecting:):

struct Bar { } 

let barName = String(reflecting: Bar.self) 
print(barName) // <Module>.Bar 

Dal Xcode 7 Release Notes: nomi

tipo e casi enum ora stampare e convertire in stringa senza qualificazione per impostazione predefinita. debugPrint o String(reflecting:) può ancora essere utilizzato per ottenere nomi completamente qualificati .

+0

Grazie per la risposta con il riferimento anche alla nota di rilascio. Mi sono ricordato che il nome del tipo era stampato con il nome del suo modulo prima, ma non ero sicuro che la mia memoria fosse corretta. Apprezzo che tu mi abbia detto che l'inizializzatore di String ha cambiato il suo comportamento predefinito. –

Problemi correlati