A mechanism for safe capturing & weakifying objects in Swift.
A mechanism for safe capturing & weakifying objects in Swift.
Without weak
With weak
Default
{ [weak self] in
guard let self = self else { return }
/// ...
}
capture { _self in
/// ...
}
Multiple parameters
{ [weak self] a, b, c in
guard let self = self else { return }
/// ...
}
capture { _self, a, b, c in
/// ...
}
Methods
{ [weak self] in
guard let self = self else { return }
self.someMethod()
}
capture(in: Self.someMethod)
Return values
let object.dataSource = { [weak self] in
guard let self = self else { return [] }
return self.data
}
let object.dataSource = capture(or: [], in: \.data)
You can add weak
to an Xcode project by adding it as a package dependency.
"https://github.com/makeupstdio/weak"
into the package repository URL text fieldIf you use SwiftPM for your project, you can add weak
to your package file. Also my advice is to use SSH.
.package(
name: "weak",
url: "git@github.com:makeupstudio/weak.git",
.branch("main")
)
Do not forget about target dependencies:
.product(
name: "Weak",
package: "weak"
)
This library is released under the MIT license. See LICENSE for details.