pourquoi userDataStore ne pointe pas profileInteractor.userDataStore!
Dans cette ligne:
var profileInteractor = ProfileInteractor(userDataStore: UserDataStore())
Vous avez créé un nouvel objet ProfileInteractor
et un nouvel objet UserDataStore
. Ensuite, vous avez fait profileInteractor
se référer à l'objet ProfileInteractor
.
Dans la ligne suivante:
var userDataStore = profileInteractor.userDataStore
Vous faites userDataStore
se réfèrent au même objet que profileInteractor.userDataStore
. Maintenant tout ce que vous faites à l'objet UserDataStore
en utilisant userDataStore
sera reflété sur profileInteractor.userDataStore
car ils sont essentiellement la même chose.
Cependant, cette ligne change tout:
profileInteractor.userDataStore = nil
Vous avez fait profileInteractor.userDataStore
référence à rien. Ce NE DOIT PAS signifie que l'objet UserDataStore
est détruit. Cela signifie simplement que vous ne pouvez plus utiliser profileInteractor.userDataStore
pour accéder à l'objet UserDataStore
. Mais devinez ce qui fait toujours référence à l'objet UserDataStore
? userDataStore
!
Donc, la réponse à votre question est que userDataStore
pointait vers le même objet que profileInteractor.userDataStore
, jusqu'à ce que vous définissiez profileInteractor.userDataStore
à zéro.
Que dois-je faire, que userDataStore pointe vers lui?
Eh bien, vous l'avez déjà fait. Vous venez de faire profileInteractor.userDataStore
point à quelque chose d'autre dans la ligne de code suivante.Si vous voulez qu'une variable locale pointe toujours vers la même chose qu'une autre variable locale, votre code peut être assez compliqué, comme dans la réponse d'Ankit Thakur, avec des pointeurs et autres choses peu sûrs. Si vous transmettez la variable à une méthode, vous pouvez utiliser le mot-clé inout
.
Cela pourrait aider: https://stackoverflow.com/questions/27364117/is-swift-pass-by-value-or-pass-by-reference – Alladinian