Closures are one of Swift must-have features, and Swift developers are aware of how tricky they can be when they capture the reference of an external object, especially when this object is self
.
To deal with this issue, developers are required to write additional code, using constructs such as [weak self]
and guard
, and the result looks like the following:
service.call(completion: { [weak self] result in
guard let self = self else { return }
// use weak non-optional `self` to handle `result`
})
The purpose of this micro-framework is to provide the developer with a helper function weakify
that will allow him to declaratively indicate that he wishes to use a weak non-optional reference to self
in closure, and not worry about how this reference is provided.
Using this weakify
function, the code above will be transformed into the much more concise:
import WeakableSelf
service.call(completion: weakify { strongSelf, result in
// use weak non-optional `strongSelf` to handle `result`
})
weakify
works with closures that take up to 7 arguments.
- Swift 4.2+
- Xcode 10+
Add the following to your Podfile
:
pod "WeakableSelf"
Add the following to your Cartfile
:
github "vincent-pradeilles/weakable-self"