<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="">
Hi everyone,
<div class="">
<div class=""><br class="">
</div>
<div class="">I failed to find the reason why Swift does not allows a non-escaping parameter to be assigned to a local variable. Here is a minimal example:</div>
<div class=""><br class="">
</div>
<div class="">
<div class=""><font face="Menlo" class="">func f(_ closure: () -&gt; Int) {</font></div>
<div class=""><font face="Menlo" class="">&nbsp; &nbsp; let a = closure</font></div>
<div class=""><font face="Menlo" class="">}</font></div>
</div>
<div class=""><br class="">
</div>
<div class="">I do understand that assigning a non-escaping closure to a variable whose lifetime exceeds that of the function would (by definition) violate the non-escaping property. For instance, doing that is understandably illegal:</div>
<div class=""><br class="">
</div>
<div class="">
<div class=""><font face="Menlo" class="">var global = { 0 }</font></div>
<div class=""><font face="Menlo" class="">func f(_ closure: () -&gt; Int) {</font></div>
<div class=""><font face="Menlo" class="">&nbsp; &nbsp; global = closure</font></div>
<div class=""><font face="Menlo" class="">}</font></div>
</div>
<div class=""><br class="">
</div>
<div class="">But in my first example, since `a` is stack allocated, there’s no risk that `closure` escapes the scope of `f`.</div>
<div class=""><br class="">
</div>
<div class="">Is there some use case I’m missing, where such assignment could be problematic?</div>
<div class="">Or is this a limitation of the compiler, which wouldn't go all the way to check whether the lifetime of the assignee is compatible with that of the non-escaping parameter may exceed that of the variable it is assigned to?</div>
<div class=""><br class="">
</div>
</div>
<div class="">Thank you very much for your time and your answer.</div>
<div class=""><br class="">
</div>
<div class="">Best,</div>
<div class="">Dimitri Racordon</div>
<div class=""><br class="">
</div>
</body>
</html>