[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