116 votes

Est-ce que Swift prend en charge la réflexion ?

Est-ce que Swift prend en charge la réflexion? Par exemple, y a-t-il quelque chose comme valueForKeyPath: et setValue:forKeyPath: pour les objets Swift?

En fait, est-ce qu'il a même un système de types dynamique, quelque chose comme obj.class en Objective-C?

1 votes

J'ai créé une classe d'aide pour la réflexion en Swift. Vous pouvez la trouver à : github.com/evermeer/EVReflection

2 votes

Ils ont supprimé reflect dans Swift 2.0. Voici comment je numérote les attributs et les valeurs Link

5voto

Klaas Points 2995

Il semble qu'une API de réflexion en Swift n'est pas une priorité élevée pour Apple pour le moment. Mais en plus de la réponse de @stevex ici, il y a une autre fonction dans la bibliothèque standard qui aide.

À partir de la version bêta 6, _stdlib_getTypeName obtient le nom de type mangled d'une variable. Collez ceci dans un playground vide :

import Foundation

class PureSwiftClass {
}

var myvar0 = NSString() // Classe Objective-C
var myvar1 = PureSwiftClass()
var myvar2 = 42
var myvar3 = "Hans"

println( "TypeName0 = \(_stdlib_getTypeName(myvar0))")
println( "TypeName1 = \(_stdlib_getTypeName(myvar1))")
println( "TypeName2 = \(_stdlib_getTypeName(myvar2))")
println( "TypeName3 = \(_stdlib_getTypeName(myvar3))")

La sortie est :

TypeName0 = NSString
TypeName1 = _TtC13__lldb_expr_014PureSwiftClass
TypeName2 = _TtSi
TypeName3 = _TtSS

L'article de blog d'Ewan Swick aide à décoder ces chaînes :

par exemple _TtSi signifie le type Int interne de Swift.

Mike Ash a un excellent article de blog couvrant le même sujet.

0 votes

@aleclarson Oui, c'est aussi très utile.

1 votes

Ne sont-ils pas des API privées? Apple approuvera-t-il l'application si elles sont utilisées?

0 votes

@EduardoCosta oui, bien sûr. Ils sont privés. Je les utilise uniquement pour les versions de débogage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X