[Swift] Mirror, Mirror dis moi tous ! :)

TofTof Membre
octobre 2015 modifié dans Objective-C, Swift, C, C++ #1

Bonjour,


 


Je suis en train de m'amuser avec Mirror disponible avec Swift 2.0


Qu'est ce que 'Mirror' ? 
Mirror permet à  partir de d'obtenir la liste des propriétés de n'importe quelles variables lors de l'exécution de l'application. C'est ce que l'on appel un mécanisme de reflection. 


Quel intérêt ?

Ce mécanisme est utile quand on a besoin de mettre à  jour des variables avec des donnés json par exemple. Le framework json peut ainsi établir une correspondance entre le nom des propriétés et les donnés présentent dans le json. 


Voici un exemple de code qui liste les propriétés d'un objet 



class Test {
  var char:Character = "A"
  var string:String = "My string"
  var integer:Int = 100
  var float:Float = 3.14
  var double:Double = 6.28
  var optChar:Character? = nil
  var optString:String? = nil
  var optInteger:Int? = nil
  var optFloat:Float? = nil
  var optDouble:Double? = nil
}

var lObj = Test()

var lMirror = Mirror(reflecting: lObj)

for lChild in lMirror.children {
  let lLabel = lChild.label!
  let lValue = lChild.value
  let lType  = lChild.value.dynamicType
  print("\(lLabel) = \(lType):'\(lValue)'")
}

Ce code affiche dans le playground:


char = Character:'A'


string = String:'My string'


integer = Int:'100'


float = Float:'3.14'


double = Double:'6.28'


optChar = Optional<Character>:'nil'


optString = Optional<String>:'nil'


optInteger = Optional<Int>:'nil'


optFloat = Optional<Float>:'nil'


optDouble = Optional<Double>:'nil'


 


Si vous aussi vous avez jouer avec Mirror vous allez sans doute pouvoir m'aider.


En effet avec Mirror je n'ai réussi qu'à  lister les propriétés d'un objet. Je n'ai pas trouver le moyen de faire l'équivalent du setValue:forKey: qu'on a en Objective-C. 


Est ce que de votre coté vous y êtes arrivé ? Si oui comment avez vous fait ?


Une autre question que je me pose c'est comment je peux savoir avec un bout de code si le type d'une propriété est Optional ou pas ?


Voilà  :) Si vous avez quelque pistes par rapport à  mes questions dites le moi ;-)


Mots clés:

Réponses

  • ça à  changé sur Swift 2.0 apparemment.


     


    Pour répondre à  ta dernière question, si une propriété est optionnelle ou pas, il y a la propriété displayStyle qui est une énumération dont Optionnel est un des cas. Avant il me semble que la propriété s'appelait disposition.


     


    Il suffit juste que tu fasses une reflection sur la valeur de ton enfant et le suivre de la propriété displayStyle afin de la comparer à  une optionnelle.


     


    Pour le setValue:forKey: je n'en sais rien. Faudrait regarder.


Connectez-vous ou Inscrivez-vous pour répondre.