A mechanism for ergonomic and safe capturing & weakifying objects in Swift.
Without Capture
With Capture
Default
{ [weak self] in
guard let self else { return }
/// ...
}
capture { _self in
/// ...
}
Multiple parameters
{ [weak self] a, b, c in
guard let self else { return }
/// ...
}
capture { _self, a, b, c in
/// ...
}
Methods
{ [weak self] in
guard let self = self else { return }
self.someMethod()
}
capture(in: <#Type#>.someMethod)
Return values
let object.dataSource = { [weak self] in
guard let self = self else { return [] }
return self.data
}
let object.dataSource = capture(orReturn: [], in: \.data)
You can add swift-capture
to an Xcode project by adding it as a package dependency.
- From the File menu, select Swift Packages › Add Package Dependency…
- Enter
"https://github.com/capturecontext/swift-capture"
into the package repository URL text field - Choose products you need to link them to your project.
If you use SwiftPM for your project, you can add weak
to your package file. Also my advice is to use SSH.
.package(
url: "git@github.com:capturecontext/swift-capture.git",
.upToNextMajor("3.0.0")
)
Do not forget about target dependencies:
.product(
name: "Capture",
package: "swift-capture"
)
This library is released under the MIT license. See LICENSE for details.