Bonjour tout le monde
Je suis occupé de faire une base de donnée avec Realm, et je me souviens que dans le cours, pour initialiser un objet Realm, on devait faire quelque chose comme:
let dog:Dog = Dog()
dog.name = "Rex"
dog.age = 12
Mais n’existe t’il pas de solution du genre:
let dog:Dog = Dog(name: "Rex", age: 12)
? Qui est quand même plus joli (je trouve)
En cherchant un peu, j’ai vu que ce n’était pas encore supporté par Realm, mais en creusant un peu plus, j’ai trouvé que ceci fonctionnait si l’init de mon objet est:
convenience init(name:String, age:Int) {
self.init()
// La suite comme d'habitude
}
Qu’en pensez-vous? A quoi sert exactement le mot clé “convenience”?
Merci et bonne journée,
Alexandre
Bonjour Alexandre,
oui c’est une des limitations de Realm en Swift à l’heure actuelle. Ils en parlent d’ailleurs ici : https://realm.io/docs/swift/latest/#limitations-models
Le convenience init
est justement la méthode recommandée par Realm pour créer tes constructeurs, ce n’est pas idéal et peut être qu’en Swift 5 les fonctionnalités de réflexivité seront suffisantes pour que Realm modifie ceci mais pour le moment c’est le mieux que l’on ait
2 « J'aime »
Merci,
Puisque c’est la seule solution pour les constructeurs actuellement, je vais faire avec, en gardant un oeil s’il y a des évolutions a un moment donné…
Quand tu dis que ce n’est pas idéal, ce n’est pas idéal pourquoi?
Merci,
Disons que ça ne respecte pas les préceptes du Swift, les init de confort sont censés appeler un init désigné de même niveau mais là il n’existe pas mais on l’appelle quand même…
En plus ils ne masquent pas l’init vide, donc rien ne t’empêche de faire une erreur et de créer un objet sans les paramètres en appelant le init vide
Ok ok, donc pas l’ideal, mais si je fais attention à l’utiliser correctement, ça ne posera pas de problème
Merci!