[swift-evolution] Proposal: weakStrong self in completion handler closures
Robert Vojta
rvojta at me.com
Sat Dec 5 05:48:54 CST 2015
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
More information about the swift-evolution
mailing list