Un bug ? Ou une erreur

j’ai le code suivant dans un ContentView:

@State var selecteditem: String = "anxiety"
        .onChange(updateValue(value: &lvalue, key: selecteditem))

Avec à la compilation une erreur affectant selecteditem : « erreur, variable utilisée durant sa propre initialisation », ce qui en serait certainement une si c’était le cas, mais le onChange intervient après l’initialisation, forcément. La fonction marche, avec un paramètre inout , d’où l’éperlutette.

Si ce n’est pas un bug, ou si c’en est un : comment contourner ?

J’ai tenté de contourner avec un Binding

.onChange(updateValue(value: &lvalue, key: $selecteditem)

…mais là, maintenant, j’ai une erreur à la compilation qui n’est plus attachée à aucune ligne, qui est « uncategorized », « Command CompileSwiftSources failed with a nonzero exit code », ce qui le mérite à défaut d’être éclairant, de ne pas pointer un doigt vengeur vers une ligne mal écrite. Hmm?? Une idée ?
Je précise : Xcode 12 standard, Mac OS 10.15.7, iOS 14.01

De remodifier une variable que tu viens de modifier m’inquiète un peu dans le sens où tu risques de rentrer dans une recursion infinie.

Tu cherches à faire quoi exactement ?

Au départ, j’ai créé un composant comprenant un Picker et un Slider. Le premier choisit un couple key, valeur dans un Dictionary, le second évalue la valeur. L’inconvénient d’en avoir fait un composant intégré c’est que le Slider s’initialise sur la valeur de l’item choisi au tour d’avant dans le Picker ; je voudrais qu’il choisisse la valeur précédente du bon item et qu’il la modifie.

Dans ma fonction updateValue, je veux donc aller chercher la valeur correspondant à l’item sélectionner et rester assuré que je reste bien sur ces mêmes valeurs jusqu’à ce que le Slider ait opéré, après quoi je remets à jour la valeur et je laisse le Picker changer d’item par l’utilisateur.

Je ne change donc pas selecteditem, et peut-être pourrais-je donc me passer du binding, mais ça ne change rien au problème, j’ai essayé…

Ah oui, mais même si je ne fais rien, ça va forcément boucler à l’infini avec ce binding… Seulement, il y a autre chose qui ne va pas, mais déjà je vais faire sauter ce binding même si ça ne suffit pas.

Merci de m’avoir montré ça, je ne l’avais pas vu du tout…

1 J'aime