J'essaie d'implémenter une fonction qui renvoie le nom simple du type de valeur :
func typeName(of value: Any) -> String {
return String(describing: type(of:value))
}
Mais quand j'essaie de l'appeler avant super.init
appeler :
class SuperTest {
init(name: String) {
print(name)
}
}
class Test: SuperTest {
init() {
// super.init(name: String(describing: type(of: self)))
super.init(name: typeName(of: self))
}
}
Test()
il échoue avec :
'self' utilisé avant l'appel à super.init
ce qui est totalement clair pour moi.
Mais quand je mets en ligne typeName(of:)
(ligne commentée) puis il compile et imprime le résultat "Test" attendu.
Pourquoi cette magie se produit-elle et comment puis-je utiliser typeName(of:)
antes de super.init()
comme type(of:)
?
Je ne peux pas non plus trouver d'informations (signature de fonction) sur type(of:)
dans Swift docs o code source .