2017-02-07 1 views
2

Puis-je obtenir une classe par son nom? Par exemple:Obtenir la classe par son nom

class Foo { 

} 

class Bar { 

} 

let x = "Foo" 
classByString(x) // need to return Foo 

Je souhaite utiliser la métaprogrammation pour réduire la maintenance du code.

+0

Créer un fichier constant et écrire tous classname avec la variable constante, vous devez écrire une fois et utiliser tout le temps. –

+0

Merci @Jacky, mais je aurais besoin sans entretien quand ajouter une nouvelle classe, pour ne pas oublier – Macabeus

+0

@Jacky je peux le faire en Ruby et Python, alors je voudrais savoir s'il est possible à Swift – Macabeus

Répondre

2

Vous pouvez utiliser un NSClassFromString:

if let anyObj : AnyObject.Type = NSClassFromString("MyAppName.MySwiftClassFoo") { 
    //call Foo 
} else { 
    //call Bar 
} 
0

Vous devez écrire la méthode comme celui-ci dans la même classe et juste besoin de passer le nom de classe que vous avez décrit dans votre code.

func classByString(_ strClassName: String) -> String? { 
    if strClassName == self.debugDescription.components(separatedBy: ".")[1].components(separatedBy: ":")[0] { 
     print("class name :- \(strClassName)") 
     return strClassName 
    } else { 
     return nil 
    } 
}