There is no if … on my screen nor there is one here 
https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon–20170313/033888.html.
 May be a typo?

In that case it cannot be a trailing closure because trailing closures are 
banned in such scenarios. 
https://github.com/apple/swift-evolution/blob/master/proposals/0056-trailing-closures-in-guard.md

As for the lazy variables you’ve mentioned in the original posts, the closure 
there is invoked lately but only once and it cannot be reused at all.

Let me know if I understood your gist now.

if someFunction { …; return } // someFunction cannot have a trailing closure 
here!


-- 
Adrian Zubarev
Sent with Airmail

Am 15. März 2017 um 12:08:19, Rien (r...@balancingrock.nl) schrieb:

If I wrote this:  

if serverCert.write(to: certificateUrl) { showErrorInKeyWindow(message); return 
}  

then the meaning of return would have been different.  

Imo it is a problem that two pieces of code impact the understanding of each 
other and that those two pieces of code could potentially be very far apart.  

I do agree that the parenthesis are not a perfect solution, it was just the 
first thing that I could think of and that has some level of similarity in 
meaning.  

Regards,  
Rien  

Site: http://balancingrock.nl  
Blog: http://swiftrien.blogspot.com  
Github: http://github.com/Balancingrock  
Project: http://swiftfire.nl  





> On 15 Mar 2017, at 12:00, Adrian Zubarev <adrian.zuba...@devandartist.com> 
> wrote:  
>  
> I’m slightly confused by this. How is a trailing closure different from a 
> code block in Swift? It’s basically the same thing with some extra syntax 
> sugar because it happens to be the last parameter of your function.  
>  
> You can simply write this if you wanted to:  
>  
> myFucntion(someLabel: abc, closureLabel: { …; return })  
>  
> Parentheses are indicating that your closure is immediately invoked.  
>  
> let someInt = { return 42 }()  
> print(someInt)  
>  
> let someClosureWhichReturnsAnInt = { return 42 } // You can reuse the closure 
>  
> print(someClosureWhichReturnsAnInt()) // Invocation happens now here  
>  
> return is scope based and it’s totally clear (to me) that in your case return 
> will return from your closure with a value of Void.  
>  
>  
>  
>  
> --  
> Adrian Zubarev  
> Sent with Airmail  
>  
> Am 15. März 2017 um 11:35:39, Rien via swift-evolution 
> (swift-evolution@swift.org) schrieb:  
>  
>> What does the following code fragment do?  
>>  
>> serverCert.write(to: certificateUrl) { showErrorInKeyWindow(message); return 
>> }  
>>  
>> The only possible answer is: I don’t know.  
>>  
>> The problem is finding out what the “return” statement will do.  
>>  
>> Without knowing if the {...} is a code block or a trailing closure it is 
>> impossible to know what the return statement will do. It will either end the 
>> closure or it will end the function that contains this code block.  
>>  
>> This could be disambiguated by using the same syntax as for lazy variables:  
>>  
>> serverCert.write(to: serverCertificateUrl) { showErrorInKeyWindow(message: 
>> message); return }()  
>>  
>> Now it is clear that the return statement will only terminate the (trailing) 
>> closure.  
>>  
>> A question to the educators on the list: Is this a real problem?  
>>  
>> Personally, I dislike this situation, but I am also ambivalent towards the 
>> solution I just described.  
>>  
>> Regards,  
>> Rien  
>>  
>> Site: http://balancingrock.nl  
>> Blog: http://swiftrien.blogspot.com  
>> Github: http://github.com/Balancingrock  
>> Project: http://swiftfire.nl  
>>  
>>  
>>  
>>  
>>  
>> _______________________________________________  
>> swift-evolution mailing list  
>> swift-evolution@swift.org  
>> https://lists.swift.org/mailman/listinfo/swift-evolution  

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to