J’ai vu que sur certains tutos, les variables avaient comme propriété (ou type ? Je ne sais pas comment on appelle ça) “dynamic”, par exemple : private dynamic var _title:String=""
A quoi cela sert ? J’ai du mal à comprendre malgré ce que j’ai pu lire sur 2/3 articles.
Excelente question, j’aimerai la completer, si quelqu’un pourrait nous expliquer aussi :
fileprivate
NSmanaged
j’en ai vu encore plein d’autre que j’ai oublier.
le mot clé dynamic permet de forcer l’utilisation du runtime Objective-C (dynamic dispatch) lors de l’accès à cette variable.
Ce sont des concepts relativement avancés mais voici un résumé :
L’ObjC utilise le dynamic dispatch pour s’exécuter, ça rend ce langage très puissant en termes de fonctionnalités mais légèrement moins performant.
Le Swift priviligie le static ou le virtual dispatch pour avoir de meilleures performances brutes
Il faut donc choisir entre performances et fonctionnalités du langage.
En marquant dynamic avant une variable membre de classe, vous forcez l’utilisation du dynamic dispatch de l’Objective C.
Dans le cours nous l’utilisons pour Realm, qui se base sur le Key-Value-Observing (KVO) pour associer les variables aux données de la base. Le KVO, de part son côté dynamique, ne peut pas marcher avec le runtime de Swift. C’est pour cette raison qu’on doit marquer les variables utilisées par realm comme dynamic
@Samir : Ce sont des questions super intéressantes, mais je pense que ça serait mieux de refaire un sujet pour que le titre soit évocateur pour les gens qui recherchent
J’avoue toutefois, ne pas avoir réellement compris le fonctionnement… Il va y avoir un runtime différent pour la durée de vie d’une variable marquée “dynamic” ? J’ai du mal à comprendre
La durée de vie sera la même, c’est dans la façon d’accéder aux variables et à leur propriétés que le système agira différemment.
Ca ne change pas grand chose pour le programmeur final (à part permettre quelques fonctionnalités spéciales comme le KVO), c’est surtout une question d’optimisation.
Ce que je te conseille, c’est de partir du principe qu’il ne faut jamais le mettre, sauf si un de tes outils en a besoin (pour nous c’est le cas avec Realm)