Thanks I&#39;ll need to find another method for handling the asynchronous delays.<br><br>On Tuesday, October 4, 2016, Fritz Anderson &lt;<a href="mailto:fritza@manoverboard.org">fritza@manoverboard.org</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">On 3 Oct 2016, at 5:46 PM, jason bronson via swift-users &lt;<a href="javascript:_e(%7B%7D,&#39;cvml&#39;,&#39;swift-users@swift.org&#39;);" target="_blank">swift-users@swift.org</a>&gt; wrote:<br><div><blockquote type="cite"><br><div><div dir="ltr">I have this class I wrote which stores the error messages from the firebaseauth if a error occurs.<div>The problem is that the variable on first return is not set and on second return is.</div><div>variable _errorMsg is empty on first return of method registerUser</div><div><br></div><div>Why is it not storing the variable when it&#39;s initially triggered?</div></div></div></blockquote></div><br><div>I assume you are talking about this function, which I’ll elide for purposes of discussion:</div><div><br></div><div>===</div><div><div><font face="Menlo"><span style="font-size:11px">func registerUser(email : String, password: String) -&gt; Bool{</span></font></div><div><font face="Menlo"><span style="font-size:11px">    createdUser = false</span></font></div><div><font face="Menlo"><span style="font-size:11px">    </span></font></div><div><font face="Menlo"><span style="font-size:11px">    FIRAuth.auth()?.createUser(<wbr>withEmail: email, password: password, completion: {(user, error) in</span></font></div><div><font face="Menlo"><span style="font-size:11px">        if error != nil {</span></font></div><div><font face="Menlo"><span style="font-size:11px">            // ...</span></font></div><div><font face="Menlo"><span style="font-size:11px">        }else{</span></font></div><div><font face="Menlo"><span style="font-size:11px">            print(&quot;DEBUG: New user created &quot;)</span></font></div><div><font face="Menlo"><span style="font-size:11px">            self.createdUser = true</span></font></div><div><font face="Menlo"><span style="font-size:11px">        }</span></font></div><div><font face="Menlo"><span style="font-size:11px">    })</span></font></div><div><font face="Menlo"><span style="font-size:11px">    </span></font></div><div><font face="Menlo"><span style="font-size:11px">    return self.createdUser</span></font></div><div><font face="Menlo"><span style="font-size:11px">}</span></font></div></div><div>===</div><div><br></div><div>The <font face="Menlo"><span style="font-size:11px">error</span></font> parameter to the closure; the nature of the task, which must surely involve turnaround from another process or host; and the compiler error telling you (I’m betting) to refer explicitly to <font face="Menlo"><span style="font-size:11px">self</span></font> in the closure; are a tipoff that the closure escapes. Escaping closures do not return to the code that presented them (or they don’t promise to; see below). <font face="Menlo"><span style="font-size:11px">createUser(withEmail:password:<wbr>completion:)</span></font> merely registers your completion (result) handler; it does not execute it; it waits in the background until the remote process responds. <span style="font-family:Menlo;font-size:11px">registerUser(...</span> <wbr>proceeds while <span style="font-family:Menlo;font-size:11px">createUser(...</span> waits.</div><div><br></div><div>Upon the first call with that email/password combination., none of the code in your closure — including the part that sets <font face="Menlo"><span style="font-size:11px">self.createdUser</span></font> to <font face="Menlo"><span style="font-size:11px">true</span></font> — will have run by the time you <span style="font-family:Menlo;font-size:11px">return self.createdUser</span>. By the end of <font face="Menlo"><span style="font-size:11px">registerUser(...</span></font>, <font face="Menlo"><span style="font-size:11px">createdUser</span></font> is still <font face="Menlo"><span style="font-size:11px">false</span></font>.</div><div><br></div><div>---</div><div><br></div><div>As for the second return I’m guessing something like this: <font face="Menlo"><span style="font-size:11px">createUser(...</span></font> caches the success of the last time it executed with that email/password pair. It sees there’s no need for a round trip through the external process, so it executes the completion closure immediately, with <font face="Menlo"><span style="font-size:11px">error == nil</span></font>. The closure sets <font face="Menlo"><span style="font-size:11px">self.createdUser = true</span></font> before it returns to your function. Your function returns the <font face="Menlo"><span style="font-size:11px">true</span></font>.</div><div><br></div><div><span style="white-space:pre-wrap">        </span>— F</div><div><br></div></div></blockquote><br><br>-- <br>Sent from Gmail Mobile<br>