<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=""><div><blockquote type="cite" class=""><div class="">Le 11 déc. 2015 à 15:05, Matthew Johnson <<a href="mailto:matthew@anandabits.com" class="">matthew@anandabits.com</a>> a écrit :</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="content-type" content="text/html; charset=utf-8" class=""><div dir="auto" class=""><div class="">What if the delegate has a member with the same name as a captured value? This would create ambiguity when referring to that name in the closure. Would this just not be allowed and callers required to rename the captured value in the capture list?<br class=""></div></div></div></blockquote><div>I would stay consistent with current @noescape blocks, where the captured value has precedence. Then you would rename with an explicit capture list, or use a different name for your local variables. And in the cases you don’t want to do either, we'd introduce a way to explicitly call delegate’s members. Either a syntax to explicitly name it, à la capture list, or an implicit name, à la `self` (for exemple `it`).</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="auto" class=""><div class=""><br class="">Btw, this is effectively a variation on Erica Sadun's Method Cascade proposal which was filed as a bug report at <a href="http://bugs.swift.org/" class="">bugs.swift.org</a>. You might want to look into that if you're not already aware of it.<br class=""></div></div></div></blockquote>Thanks for the note. Yes it raises the same kind of issues, and the use cases overlap. I think they complement one another pretty well.</div><div>Method Cascading is a tool for an interface consumer, Closure Delegation is more a tool for an interface provider (then used by the interface's consumers).</div><div><br class=""></div><div>Just after the closure returns is a good point to make additional work, like destroying a context setup before the closure call, or taking into account members changed during the closure call. You don’t have that with Method Cascading.</div><div><br class=""></div><div><br class=""><blockquote type="cite" class=""><div class=""><div dir="auto" class=""><div class=""><br class="">Sent from my iPad</div><div class=""><br class="">On Dec 11, 2015, at 6:46 AM, Pierre Monod-Broca via swift-evolution <<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>> wrote:<br class=""><br class=""></div><blockquote type="cite" class=""><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div class="">To answer James:</div><div class="">Binding is probably a better word than delegation :), it seems more consistent.<div class=""><br class=""></div><div class="">I’m ok with the javascript syntax of binding, but the curried-like one has the advantage of being consistent with methods eg:</div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(195, 89, 0);" class=""><span style="color: rgb(53, 86, 138);" class="">let</span><span style="" class=""> f = </span>BarImplementation<span style="" class="">.</span><span style="color: rgb(88, 126, 168);" class="">doStuff // BarImplementation -> () -> ()</span></div></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">f(bar)()</div></div><div class=""><br class=""></div><div class="">To answer Marc:</div><div class="">The bound value is not captured from the closure definition site, it’s explicitly bound, usually just before calling the closure. I think a strong reference is enough, like when calling a method. Besides the binding wouldn’t mutate the closure, but create a new one, usually short-lived.</div><div class=""><br class=""></div>I think `self` should keep it’s value, and we should find another word for the bound value, especially to avoid `self` being shadowed. I would suggest `this` if it wasn’t heavily used in other language to mean self.<div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div class="">
<div class="">Pierre</div>
</div>
<br class=""><div class=""><blockquote type="cite" class=""><div class="">Le 11 déc. 2015 à 13:36, Marc Knaup <<a href="mailto:marc@knaup.koeln" class="">marc@knaup.koeln</a>> a écrit :</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">How would capture semantics work?<div class=""><br class=""></div><div class="">I think this could easily lead to reference cycles as the parameter is captured strongly without any hint at the call-site.</div><div class="">The developer should be warned and have a way to state the capture semantics explicitly through the capture list.</div><div class=""><br class=""></div><div class="">If the delegate parameter "Bar" becomes "self" in the closure then using "self" everywhere should be required just as in normal closures. "@noescape" would avoid this but the closure reference must be stored then.</div><div class="">If the delegate parameter "Bar" really becomes "self" there's also the problem that the original "self" variable suddenly becomes hidden.</div><div class=""><br class=""></div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Dec 11, 2015 at 1:15 PM, James Campbell via swift-evolution <span dir="ltr" class=""><<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class=""><br class=""></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Dec 11, 2015 at 12:14 PM, James Campbell <span dir="ltr" class=""><<a href="mailto:james@supmenow.com" target="_blank" class="">james@supmenow.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="">So I don't like this way of declaring it as it is not very clear what it is doing but I actually prefer the javascript way of binding, so in your example the code would be this:<div class=""><br class=""></div><div class=""><div style="font-size:12.8px;margin:0px" class=""><font face="Menlo" style="font-size:11px" class=""><span style="color:rgb(53,86,138)" class="">func</span> prepareSomething(setup:() -> ()) {</font></div><span class=""><span class=""><div style="font-size:12.8px;margin:0px" class=""><font face="Menlo" style="font-size:11px" class=""><font color="#cf8724" class=""> </font><span style="color:rgb(53,86,138)" class="">let</span><font color="#cf8724" class=""> </font>bar<font color="#cf8724" class=""> = </font><span style="color:rgb(195,89,0)" class="">BarImplementation</span>()</font></div><div style="font-size:12.8px;margin:0px" class=""><font face="Menlo" style="font-size:11px" class=""> <span style="color:rgb(207,135,36)" class="">// code before</span></font></div></span></span><div style="font-size:12.8px;margin:0px" class=""><font face="Menlo" style="font-size:11px" class=""> setup().bind(bar)</font></div><div style="font-size:12.8px;margin:0px;color:rgb(207,135,36)" class=""><font face="Menlo" style="font-size:11px" class=""><span style="" class=""> </span>// code after</font></div><div style="font-size:12.8px;margin:0px" class=""><font face="Menlo" style="font-size:11px" class="">}</font></div></div><div style="font-size:12.8px;margin:0px" class=""><font face="Menlo" style="font-size:11px" class=""><br class=""></font></div><div style="font-size:12.8px;margin:0px" class=""><font face="Menlo" style="font-size:11px" class="">The bind method lets Swift know it should bind this to `bar`, so now this is the same as writing `bar`. So in your example:</font></div><div style="font-size:12.8px;margin:0px" class=""><font face="Menlo" style="font-size:11px" class=""><br class=""></font></div><div style="font-size:12.8px;margin:0px" class=""><div style="font-size:12.8px" class="">without delegation </div><div style="font-size:12.8px" class=""><span class=""><div style="margin:0px;font-size:11px;font-family:Menlo;color:rgb(88,126,168)" class="">prepareSomething<span style="" class=""> { delegate </span><span style="color:rgb(53,86,138)" class="">in</span></div><div style="margin:0px;font-size:11px;font-family:Menlo" class=""> delegate.<span style="color:rgb(88,126,168)" class="">someConfig</span> = <span style="color:rgb(232,35,0)" class="">"Hello World"</span></div><div style="margin:0px;font-size:11px;font-family:Menlo" class="">}</div><div class=""><br class=""></div></span><div class="">with binding</div><span class=""><div class=""><div style="margin:0px;font-size:11px;font-family:Menlo;color:rgb(88,126,168)" class="">prepareSomething<span style="" class=""> {</span></div><div style="margin:0px;font-size:11px;font-family:Menlo" class=""> <span style="color:rgb(88,126,168)" class="">someConfig</span> = <span style="color:rgb(232,35,0)" class="">"Hello World"</span></div><div style="margin:0px;font-size:11px;font-family:Menlo" class="">}</div></div><div style="margin:0px;font-size:11px;font-family:Menlo" class=""><br class=""></div></span><div style="margin:0px;font-size:11px;font-family:Menlo" class="">These would work the same :) </div></div></div></div><div class=""><div class=""><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Dec 11, 2015 at 11:49 AM, Pierre Monod-Broca <span dir="ltr" class=""><<a href="mailto:pierremonodbroca@gmail.com" target="_blank" class="">pierremonodbroca@gmail.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class="">without delegation </div><div class=""><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(88,126,168)" class="">prepareSomething<span style="" class=""> { delegate </span><span style="color:#35568a" class="">in</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class=""> delegate.<span style="color:#587ea8" class="">someConfig</span> = <span style="color:#e82300" class="">"Hello World"</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="">}</div><div class=""><br class=""></div><div class="">with delegation</div><div class=""><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(88,126,168)" class="">prepareSomething<span style="" class=""> {</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class=""> <span style="color:#587ea8" class="">someConfig</span> = <span style="color:#e82300" class="">"Hello World"</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo" class="">}</div></div><div class=""><br class=""></div><div class="">The exemple is not very compelling, but in a manifest file it would reduce boiler plate.</div><span class=""><font color="#888888" class=""><div class=""><br class=""></div><div class="">
<div class="">Pierre</div>
</div></font></span><div class=""><div class="">
<br class=""><div class=""><blockquote type="cite" class=""><div class="">Le 11 déc. 2015 à 12:29, James Campbell <<a href="mailto:james@supmenow.com" target="_blank" class="">james@supmenow.com</a>> a écrit :</div><br class=""><div class=""><div dir="ltr" class="">Whats the advantage over this ?<div class=""><br class=""></div><div class=""><blockquote type="cite" style="color:rgb(80,0,80);font-size:12.8px" class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><font face="Menlo" style="font-size:11px" class=""><span style="color:rgb(53,86,138)" class="">protocol</span> Bar {</font></div><div class=""><div style="margin:0px" class=""><span class=""><div style="margin:0px" class=""><font face="Menlo" style="font-size:11px" class=""> <span style="color:rgb(53,86,138)" class="">var</span> someConfig: <span style="color:rgb(195,89,0)" class="">String</span> { <font color="#35568a" class="">get set</font> }</font></div><div style="margin:0px" class=""><font face="Menlo" style="font-size:11px" class="">}</font></div><div style="margin:0px;min-height:13px" class=""><font face="Menlo" style="font-size:11px" class=""><br class=""></font></div></span><div style="margin:0px" class=""><font face="Menlo" style="font-size:11px" class=""><span style="color:rgb(53,86,138)" class="">func</span> prepareSomething(setup: (delegate:</font><span style="color:rgb(195,89,0);font-size:11px;font-family:Menlo" class=""> Bar</span><span style="font-size:11px;font-family:Menlo;color:rgb(34,34,34)" class="">) -> ()) {</span></div></div></div></div></blockquote></div></div></blockquote></div></div><div class=""><div class="h5"><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Dec 11, 2015 at 11:27 AM, Pierre Monod-Broca <span dir="ltr" class=""><<a href="mailto:pierremonodbroca@gmail.com" target="_blank" class="">pierremonodbroca@gmail.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><br class=""></div><div class=""><div class=""><span class=""><blockquote type="cite" class=""><div class="">Le 11 déc. 2015 à 11:54, James Campbell <<a href="mailto:james@supmenow.com" target="_blank" class="">james@supmenow.com</a>> a écrit :</div><br class=""><div class=""><div dir="ltr" class="">Could you explain a little more its a bit confusing ?</div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Dec 11, 2015 at 10:32 AM, Pierre Monod-Broca via swift-evolution <span dir="ltr" class=""><<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="">A groovy closure can have a delegate which replaces `this` as the default receiver. The issue in groovy is that it is not compatible with static compilation, and there is no way to know from the code what is the type of the delegate.<div class=""><br class=""></div><div class=""><div class="">It works great for DSL. It would work great the Swift Package Manager manifest, among other things.</div></div><div class=""><br class=""></div><div class="">It could look like this in swift<br class=""><div class=""><br class=""></div><div class=""><font style="font-size:11px" face="Menlo" class=""><span style="color:rgb(53,86,138)" class="">protocol</span> Bar {</font></div><div class=""><div style="margin:0px;line-height:normal" class=""><div style="margin:0px;line-height:normal" class=""><font style="font-size:11px" face="Menlo" class=""> <span style="color:rgb(53,86,138)" class="">var</span> someConfig: <span style="color:rgb(195,89,0)" class="">String</span> { <font color="#35568a" class="">get set</font> }</font></div><div style="margin:0px;line-height:normal" class=""><font style="font-size:11px" face="Menlo" class="">}</font></div><div style="margin:0px;line-height:normal;min-height:13px" class=""><font style="font-size:11px" face="Menlo" class=""><br class=""></font></div><div style="margin:0px;line-height:normal" class=""><font style="font-size:11px" face="Menlo" class=""><span style="color:rgb(53,86,138)" class="">func</span> prepareSomething(setup: <span style="color:rgb(53,86,138)" class="">@delegate</span> <span style="color:rgb(195,89,0)" class="">Bar</span> -> () -> ()) {</font></div></div></div></div></div></blockquote></div></div></div></blockquote></span>Here we define a function `prepareSomething(_:)` which receives one parameter: a closure that takes a delegate conforming to `Bar`, and otherwise take no parameter and returns nothing</div><div class=""><span class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><div class=""><div style="margin:0px;line-height:normal" class=""><div style="margin:0px;line-height:normal" class=""><font style="font-size:11px" face="Menlo" class=""><font color="#cf8724" class=""> </font><span style="color:rgb(53,86,138)" class="">let</span><font color="#cf8724" class=""> </font>bar<font color="#cf8724" class=""> = </font><span style="color:rgb(195,89,0)" class="">BarImplementation</span>()</font></div><div style="margin:0px;line-height:normal" class=""><font style="font-size:11px" face="Menlo" class=""> <span style="color:rgb(207,135,36)" class="">// code before</span></font></div><div style="margin:0px;line-height:normal" class=""><font style="font-size:11px" face="Menlo" class=""> setup(bar)()</font></div></div></div></div></div></blockquote></div></div></div></blockquote></span>Here we pass a delegate to the closure, then call the closure</div><div class=""><span class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><div class=""><div style="margin:0px;line-height:normal" class=""><div style="margin:0px;line-height:normal;color:rgb(207,135,36)" class=""><font style="font-size:11px" face="Menlo" class=""><span class=""> </span>// code after</font></div><div style="margin:0px;line-height:normal" class=""><font style="font-size:11px" face="Menlo" class="">}</font></div><div style="margin:0px;line-height:normal;min-height:13px" class=""><font style="font-size:11px" face="Menlo" class=""><br class=""></font></div><div style="margin:0px;line-height:normal" class=""><font style="font-size:11px" face="Menlo" class="">prepareSomething { () -> () <span style="color:rgb(53,86,138)" class="">in</span></font></div></div></div></div></div></blockquote></div></div></div></blockquote></span>Here we call the function `prepareSomething(_:)` with a closure which we define a the same time</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><div class=""><div style="margin:0px;line-height:normal" class=""><div style="margin:0px;line-height:normal" class=""><font style="font-size:11px" face="Menlo" class=""> someConfig = <span style="color:rgb(232,35,0)" class="">"Hello world"</span></font></div></div></div></div></div></blockquote></div></div></div></blockquote>Here `someConfig` is a property of the closure’s delegate</div><div class=""><span class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><div class=""><div style="margin:0px;line-height:normal" class=""><div style="margin:0px;line-height:normal" class=""><font style="font-size:11px" face="Menlo" class="">}</font></div><div style="font-family:Menlo;font-size:11px" class=""><br class=""></div></div><div class=""><div class="">Where `someConfig` would refer to bar.</div><div class=""><br class=""></div></div></div></div></div></blockquote></div></div></div></blockquote><div class=""><br class=""></div></span>I’m not sure about the syntax, we could also declare the delegate that way, maybe :<div class=""><div style="margin:0px;font-size:11px;line-height:normal" class=""><font face="Menlo" class=""><span style="color:rgb(53,86,138)" class="">func</span> prepareSomething(doSomething: </font><span style="color:rgb(53,86,138);font-family:Menlo" class="">@delegate(</span><span style="color:rgb(195,89,0);font-family:Menlo" class="">Bar</span><span style="color:rgb(53,86,138);font-family:Menlo" class="">)</span><span style="font-family:Menlo" class=""> () -> ()) {</span></div><div style="margin:0px;font-size:11px;line-height:normal" class=""><span style="font-family:Menlo" class=""> </span><span style="color:rgb(207,135,36);font-family:Menlo" class="">/**/</span></div><div style="margin:0px;font-size:11px;line-height:normal" class=""><span style="font-family:Menlo" class="">}</span></div></div><span class=""><div class=""><span style="font-family:Menlo" class=""><br class=""></span></div><blockquote type="cite" class=""><div class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><div class=""><div class="">
<div class="">Pierre</div>
</div>
<br class=""></div></div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=xV0JY-2FdZMnUMvSFtZnLiBPRTDDOSQf3-2FpH33HYOlBxG0x8OMTNdemFXqF3foFYoqpGnhR8cy-2FlFL4xK8ijX2ylpZvq90E32A79TBFfiQYS5Pn-2Bo59HipCUsCsV7eMemKd8j14RCY6aiJ8QyHIDjLlmHedoUTG5IACcHSAEiGzeoFzcjBqHCbGp9X00IcqPqaDU-2FFTwIwYZpWABXnqMZQq7KoGvwXM01ndVU3G1gj2uw-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" class="">
</div>
<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="">
<br class=""></blockquote></div><br class=""><br clear="all" class=""><div class=""><br class=""></div>-- <br class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><span style="font-size:16px;line-height:19.2px" class=""></span><span style="font-size:12.8px" class=""> Wizard</span><br class=""></div><div class=""><a href="mailto:james@supmenow.com" target="_blank" class="">james@supmenow.com</a></div><div class=""><a href="tel:%2B44%207523%20279%20698" value="+447523279698" target="_blank" class="">+44 7523 279 698</a></div></div></div></div></div></div>
</div>
</div></blockquote></span></div><br class=""></div><div class=""><br class=""></div></div></blockquote></div><br class=""><br clear="all" class=""><div class=""><br class=""></div>-- <br class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><span style="font-size:16px;line-height:19.2px" class=""></span><span style="font-size:12.8px" class=""> Wizard</span><br class=""></div><div class=""><a href="mailto:james@supmenow.com" target="_blank" class="">james@supmenow.com</a></div><div class=""><a href="tel:%2B44%207523%20279%20698" value="+447523279698" target="_blank" class="">+44 7523 279 698</a></div></div></div></div></div></div>
</div>
</div></div></div></blockquote></div><br class=""></div></div></div></div></blockquote></div><div class=""><div class="h5"><br class=""><br clear="all" class=""><div class=""><br class=""></div>-- <br class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><span style="font-size:16px;line-height:19.2px" class=""></span><span style="font-size:12.8px" class=""> Wizard</span><br class=""></div><div class=""><a href="mailto:james@supmenow.com" target="_blank" class="">james@supmenow.com</a></div><div class=""><a href="tel:%2B44%207523%20279%20698" value="+447523279698" target="_blank" class="">+44 7523 279 698</a></div></div></div></div></div></div>
</div></div></div>
</div></div></blockquote></div><div class=""><div class="h5"><br class=""><br clear="all" class=""><div class=""><br class=""></div>-- <br class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><span style="font-size:16px;line-height:19.2px" class=""></span><span style="font-size:12.8px" class=""> Wizard</span><br class=""></div><div class=""><a href="mailto:james@supmenow.com" target="_blank" class="">james@supmenow.com</a></div><div class=""><a href="tel:%2B44%207523%20279%20698" value="+447523279698" target="_blank" class="">+44 7523 279 698</a></div></div></div></div></div></div>
</div></div></div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=6ZGE61OxINd5lLe2xYh9Ku-2BXbixWNr2nvfzp2IB1sZgWRsPrcN3q2mRgMRDye-2FPR-2FAfm-2BbM-2BAviUEDMpa-2BJOgJNHJhGdFedlvTGnSqTFT7dud7SMuLNBfcWxdZOTWxL4bhebaGbVO0ffZigCO4XVkUwxO30NEgj6cgk1nYD1yqiO4L6NdbdbTOVGByGUKznF4y9aeaNp0n6oN7xPQresh-2Fc27laLObvbdQUVxkXtbsY-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" class="">
<br class="">_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" 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="">
<br class=""></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=eLFMrKDT8iBxZ-2Fbnk-2BZqvSchNN-2FvYXdceA0T7VxwkAdxdSG3LukWQEHPEG44xp0R94X-2FHsIDTnAOYe9YdPAo8zTJalHx0LF2YJ0u4I4Bnt7aZFUvzTKSSoFsNYBAN9v9ZsChYxaW8IgHHOU-2BlSCm04sCsvuQGBwpYziRQqVExhbFf8tY-2Fp8PfAY4OxMqr96aIOa0tBbQhBqq9-2FiObumm3NA5153nSZM9H0Yj72-2FOwdk-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="">
</div></blockquote><blockquote type="cite" class=""><div class=""><span class="">_______________________________________________</span><br class=""><span class="">swift-evolution mailing list</span><br class=""><span class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a></span><br class=""><span class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br class=""></div></blockquote></div></div></blockquote></div><br class=""></body></html>