> On Oct 26, 2017, at 2:19 PM, Mike Kluev via swift-evolution 
> <[email protected]> wrote:
> on Wed, 25 Oct 2017 13:41:40 +0200 David Hart <[email protected] 
> <mailto:[email protected]>> wrote:
> 
> class A {
>     func foo() {
>         func local() {
>             bar() // error: Call to method ‘bar' in function ‘local' requires 
> explicit 'self.' to make capture semantics explicit
>         }
> 
>         // ...
>     }
> }
> 
> it's not only about calling "bar"... any variable access will require self. 
> which will be quite annoying, especially given the fact that "local" my not 
> even be used in an escaping context discussed. (*)
> 
> i think it is more consistent to prepend local with self if it is used in an 
> escaping context:

I think this would be possible, yes.  If nothing else, we could allow the 
function to be explicitly declared escaping or non-ecaping to get this rule.

John.

> 
> func foo() {
> 
>     func local() {
>         bar()              // no self needed here ever
>         variable = 1   // no self needed here, ever
>     }
>     
>     func otherLocal() {
>         print("i am not capturing self")
>     }
>     
>     DispatchQueue.main.async {
>         local()            // error without self
>         self.local()       // ok
>         otherLocal()       // ok without self
>     }
> }
> 
> (*) interestingly, closures always treat themselves as "escaping", even if 
> it's not the case, e.g. even if i only use them in a non-escaping contexts. 
> worth to add an explicit attribute to denote non-escaping closures?
> 
> let closure = @nonescaping {
>     print("i am not escaping")
>     variable = 1 // ok without self
> }
> 
> DispatchQueue.main.async(execute: closure) // error, non escaping closure 
> passed
> 
> Mike
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to