[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