Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/marty-suzuki/ducttape
π¦ KeyPath dynamicMemberLookup based syntax sugar for Swift.
https://github.com/marty-suzuki/ducttape
carthage cocoapods ios keypath-dynamicmemberlookup macos swift swift-package-manager syntax-sugar tvos watchos
Last synced: 30 days ago
JSON representation
π¦ KeyPath dynamicMemberLookup based syntax sugar for Swift.
- Host: GitHub
- URL: https://github.com/marty-suzuki/ducttape
- Owner: marty-suzuki
- License: mit
- Created: 2019-10-01T18:31:52.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2021-06-03T01:49:06.000Z (over 3 years ago)
- Last Synced: 2024-10-04T12:46:30.579Z (about 1 month ago)
- Topics: carthage, cocoapods, ios, keypath-dynamicmemberlookup, macos, swift, swift-package-manager, syntax-sugar, tvos, watchos
- Language: Swift
- Homepage:
- Size: 20.5 KB
- Stars: 175
- Watchers: 4
- Forks: 12
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# DuctTape
π¦ KeyPath dynamicMemberLookup based syntax sugar for Swift.
```swift
let label: UILabel = UILabel().ductTape
.numberOfLines(0)
.textColor(.red)
.text("Hello, World!!")
```Above is same as below definition.
```swift
let label: UILabel = {
let label = UILabel()
label.numberOfLines = 0
label.textColor = .red
label.text = "Hello, World!!"
return label
}()
```## Usage
NSObject already has been compatible with DuctTape, so you can access `.ductTape` property like below.
```swift
let builder: Builder = UIView().ductTape
```If you access `.ductTape`, it returns `Builder` that provides setter of properties via KeyPath dynamicMemberLookup.
```swift
let view: UIView = UIView().ductTape
.backgroundColor(.red)
.translatesAutoresizingMaskIntoConstraints(false)
```#### How to access methods
If you want to access methods of object which is building, `func reinforce(_ handler: (Base) -> Void) Builder` enable to access methods.
```swift
let collectionView: UICollectionView = UICollectionView().ductTape
.backgroundColor(.red)
.reinforce { collectionView in
collectionView.register(UITableViewCell.self, forCellWithReuseIdentifier: "Cell")
}
````Builder` has `func reinforce(_ t1: T1, ..., handler: (Base) -> Void) Builder` methods.
In additional usage, be able to access outside object with `func reinforce` if passing objects as arguments.```swift
lazy var collectionView: UICollectionView = UICollectionView().ductTape
.translatesAutoresizingMaskIntoConstraints(false)
.reinforce(view) { collectionView, view in
view.addSubview(collectionView)
NSLayoutConstraint.activate([
view.topAnchor.constraint(equalTo: collectionView.topAnchor),
view.leadingAnchor.constraint(equalTo: collectionView.leadingAnchor),
view.trailingAnchor.constraint(equalTo: collectionView.trailingAnchor),
view.bottomAnchor.constraint(equalTo: collectionView.bottomAnchor)
])
}
```#### How to use DuctTape with self-implemented classes
There are two ways to use DuctTape.
1. Use DuctTapeCompatible
```swift
class Dog: DuctTapeCompatible {
var name: String
}let dog: Dog = Dog().ductTape
.name("Copernicus")
```2. Use Builder directly
```swift
class Dog {
var name: String
}let dog: Dog = Builder(Dog())
.name("Copernicus")
```#### Sample Code
```swift
class ViewController: UIViewController {let flowLayout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
.ductTape
.minimumLineSpacing(10)
.minimumInteritemSpacing(10)
.itemSize(CGSize(width: 100, height: 100))
.scrollDirection(.vertical)lazy var collectionView: UICollectionView = UICollectionView(frame: .zero,
collectionViewLayout: flowLayout)
.ductTape
.dataSource(self)
.delegate(self)
.translatesAutoresizingMaskIntoConstraints(false)
.reinforce {
$0.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
}override func viewDidLoad() {
super.viewDidLoad()view.addSubview(collectionView)
NSLayoutConstraint.activate([
view.topAnchor.constraint(equalTo: collectionView.topAnchor),
view.leadingAnchor.constraint(equalTo: collectionView.leadingAnchor),
view.trailingAnchor.constraint(equalTo: collectionView.trailingAnchor),
view.bottomAnchor.constraint(equalTo: collectionView.bottomAnchor)
])
}
}
```## Requirement
- Xcode 11
- macOS 10.10
- iOS 9.0
- tvOS 10.0
- watchOS 3.0## Installation
#### CocoaPods
DuctTape is available through [CocoaPods](http://cocoapods.org). To install
it, simply add the following line to your `Podfile`:```ruby
pod "DuctTape"
```#### Carthage
If youβre using [Carthage](https://github.com/Carthage/Carthage), simply add
DuctTape to your `Cartfile`:```
github "marty-suzuki/DuctTape"
```#### Swift Package Manager
Simply add the following line to your `Package.swift`:
```
.package(url: "https://github.com/marty-suzuki/DuctTape.git", from: "version")
```## License
DuctTape is released under the MIT License.