[swift-evolution] Proposal: weakStrong self in completion handler closures

Kevin Ballard kevin at sb.org
Sun Dec 6 02:19:45 CST 2015


How would weakStrong work if the closure has a non-Void return type?

Personally, I just use

guard let this = self else { return }

in this scenario. It's not much trouble to type `this.foo` instead of
`self.foo` (it's even the same number of letters).

-Kevin Ballrd

On Sat, Dec 5, 2015, at 03:48 AM, Robert Vojta wrote:
> Hi all,
> 
> let’s say we have a completion handler closure for some function
> (networking, …) and we have [weak self] there. Example …
> 
> doSomething() { [weak self] result in
>> }
> 
> … then we can use self?.whatever to access self properties, methods. Or
> we can try to check if self exists ...
> 
> guard let strongSelf = self else { return }
> 
> … and use strongSelf.
> 
> Can we introduce [weakStrong self] with following behavior:
> 
>  - self is a weak reference
>  - when the closure is going to be executed, all weakStrong weak
>  references are checked if they do exist
>  - if they do exist, they’re strong referenced for the closure and the
>  closure is executed
>  - if they don’t exist, closure is not executed
> 
> doSomething() { [weakStrong self] result in
>   // Closure code is not executed if self no longer exists
>   // self is a strong reference now
> }
> 
> What do you think? Does it make sense?
> 
> My motivation is to get rid off of the repetitive code like this one:
> 
> doSomething() { [weak self] result in
>   guard let strongSelf = self else { return }
>   strongSelf.doSomethingWithResult(result)
> }
> 
> Robert
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution


More information about the swift-evolution mailing list