My understanding was that [weak variable] behaved that way in Swift already (but now I&#39;m not certain and can&#39;t find a definitive answer on the book), creating a strong reference. Otherwise this turns into inconsistent behavior, where the variable could deallocate and become nil at any point inside the closure. <br><br>Those semantics are also important in a case with a closure within a closure:<br><br>function1(){  [weak self] in<br> function2() {<br>  // the value (If present) inside Optional&lt;Self&gt; is a strong reference here<br> }<br>}<br><div class="gmail_quote"><div dir="ltr">On Sat, Dec 5, 2015 at 11:22 AM Jacob Bandes-Storch via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Another approach would be to simply allow<br><br>guard let self = self else { return }<br><div class="gmail_quote"><div dir="ltr">On Sat, Dec 5, 2015 at 3:48 AM Robert Vojta &lt;<a href="mailto:rvojta@me.com" target="_blank">rvojta@me.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all,<br>
<br>
let’s say we have a completion handler closure for some function (networking, …) and we have [weak self] there. Example …<br>
<br>
doSomething() { [weak self] result in<br>
  …<br>
}<br>
<br>
… then we can use self?.whatever to access self properties, methods. Or we can try to check if self exists ...<br>
<br>
guard let strongSelf = self else { return }<br>
<br>
… and use strongSelf.<br>
<br>
Can we introduce [weakStrong self] with following behavior:<br>
<br>
 - self is a weak reference<br>
 - when the closure is going to be executed, all weakStrong weak references are checked if they do exist<br>
 - if they do exist, they’re strong referenced for the closure and the closure is executed<br>
 - if they don’t exist, closure is not executed<br>
<br>
doSomething() { [weakStrong self] result in<br>
  // Closure code is not executed if self no longer exists<br>
  // self is a strong reference now<br>
}<br>
<br>
What do you think? Does it make sense?<br>
<br>
My motivation is to get rid off of the repetitive code like this one:<br>
<br>
doSomething() { [weak self] result in<br>
  guard let strongSelf = self else { return }<br>
  strongSelf.doSomethingWithResult(result)<br>
}<br>
<br>
Robert<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=8K1sNvSH2KR-2BkHEodrUTpXfk2GzibLlIRii1pWdIrM-2Bd6C1U86-2BIQFlrBV4QHYIwO4Ju7QuYG05dKhl-2B0k7XX2zWjNk12mu9eI5NPqUZCO5bL6q8M9xA3UKbcHrGX-2BNunL9WE3ZYTgyPr4X9lemxGfvXzxxAzAgOH6nPd2CeAIrU-2Fa0Ymmb3E-2BAdKbQpm5rSkVJileTlnBuQjLeFn5qXi58Qrnrss3OZr4rqgxI3-2F1w-3D" alt="" width="1" height="1" border="0" style="min-height:1px!important;width:1px!important;border-width:0!important;margin-top:0!important;margin-bottom:0!important;margin-right:0!important;margin-left:0!important;padding-top:0!important;padding-bottom:0!important;padding-right:0!important;padding-left:0!important">
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div><div dir="ltr">-- <br></div>Javier Soto