<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">I agree that "weak-strong" is a commonly used (and correct) pattern, and I also wish that there were an easier way to do that. I also did file a radar myself about that.<div class=""><br class=""></div><div class="">But I don't have any idea of the correct way of implementing it because the actually desired behaviour in the "failing" case can change depending on your use-case.</div><div class=""><br class=""></div><div class="">Most of the times you just want to `guard let strongSelf = self else { return }`, but that works when you return `Void` and you don't want to manage this "failure" in any other way...</div><div class="">Should `weak-strong` be allowed only for closures that `-&gt; Void`?</div><div class="">What if you want to fire a "completionBlock" anyway?</div><div class=""><br class=""></div><div class="">While the need to remove this common boilerplate feels strong, I'm not certain this would be the right way. Can't really suggest a better alternative though.</div><div class=""><br class=""><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 5 Dec 2015, at 19:21, Jacob Bandes-Storch via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class="">Another approach would be to simply allow<br class=""><br class="">guard let self = self else { return }<br class=""><div class="gmail_quote"><div dir="ltr" class="">On Sat, Dec 5, 2015 at 3:48 AM Robert Vojta &lt;<a href="mailto:rvojta@me.com" class="">rvojta@me.com</a>&gt; wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all,<br class="">
<br class="">
let’s say we have a completion handler closure for some function (networking, …) and we have [weak self] there. Example …<br class="">
<br class="">
doSomething() { [weak self] result in<br class="">
&nbsp; …<br class="">
}<br class="">
<br class="">
… then we can use self?.whatever to access self properties, methods. Or we can try to check if self exists ...<br class="">
<br class="">
guard let strongSelf = self else { return }<br class="">
<br class="">
… and use strongSelf.<br class="">
<br class="">
Can we introduce [weakStrong self] with following behavior:<br class="">
<br class="">
&nbsp;- self is a weak reference<br class="">
&nbsp;- when the closure is going to be executed, all weakStrong weak references are checked if they do exist<br class="">
&nbsp;- if they do exist, they’re strong referenced for the closure and the closure is executed<br class="">
&nbsp;- if they don’t exist, closure is not executed<br class="">
<br class="">
doSomething() { [weakStrong self] result in<br class="">
&nbsp; // Closure code is not executed if self no longer exists<br class="">
&nbsp; // self is a strong reference now<br class="">
}<br class="">
<br class="">
What do you think? Does it make sense?<br class="">
<br class="">
My motivation is to get rid off of the repetitive code like this one:<br class="">
<br class="">
doSomething() { [weak self] result in<br class="">
&nbsp; guard let strongSelf = self else { return }<br class="">
&nbsp; strongSelf.doSomethingWithResult(result)<br class="">
}<br class="">
<br class="">
Robert<br class="">
_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
</blockquote></div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=UNDxqBUDZDpZmPmXfIKeZ1UxMq-2BwsURX5ulfpb2jFAZXFFdBAshFo-2FWR7nXV1-2Fgp1kALMWnMp17AZhLfCmPpD8ZJNlVvFBI5Bj3kotpF5ITxiSa7li7rfKxRehueOvMZQ8T270v-2BDoe9J-2BFX0-2F-2BO1600arszUuE0Az-2F93v-2FkDphd0Afr-2FIeF8nuJQYd1vjsDbAvieNQHayWwWB6eRba5bx2kkKbt28qDeRSMq4Mmd4c-3D" alt="" width="1" height="1" border="0" style="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;" class="">
_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></div></div></body></html>