An extension that let's you manipulate an object with a closure
With is a Swift extension that lets you manipulate an object with a closure. It provides a concise and expressive way to modify an object's properties without having to create temporary variables or write boilerplate code.
With works by taking an object and a closure as input. The closure takes an inout reference to the object, allowing you to modify its properties directly. The modified object is then returned by the with function. See Example
You can add With to your project using Swift Package Manager by adding the following line to your Package.swift file: .package(url: "https://github.com/eonist/With.git", branch:
"master")`
// Example 1:
let rectangle: CGRect = with(.init(x: 0, y: 0, width: 100, height: 100)) {
$0 = $0.offsetBy(dx: 20, dy: 20)
$0 = $0.insetBy(dx: 10, dy: 10)
}
Swift.print(rectangle) // X:30.0, y:30.0, width:80.0, height:80.0
// Example 2:
let color: UIColor = with(.init(red: 50, green: 100, blue: 0, alpha: 0.9)) { ( col:inout UIColor) -> Void in
col = col.withAlphaComponent(0.2)
}
Swift.print(color.cgColor.alpha) // 0.2
// Example 3:
var size: CGSize = .init(width: 50, height: 40)
with(size) {
$0.width = 100
$0.height = 50
}
Swift.print(size)//100, 50
// Example 4:
func createImageView() -> UIImageView {
return with(.init()){
$0.image = UIImage(named: "someGraphic")
self.addSubview($0)
}
}
createImage() // Adds image to view
Thanks https://github.com/sindresorhus for teaching me this JavaScript-esque super power 💪
- Add examples for withMap and with that uses keypath to readme