devxoul/Then
✨ Super sweet syntactic sugar for Swift initializers
At a Glance
Initialize UILabel then set its properties.
let label = UILabel().then {
$0.textAlignment = .center
$0.textColor = .black
$0.text = "Hello, World!"
}This is equivalent to:
let label: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.textColor = .black
label.text = "Hello, World!"
return label
}()Tips and Tricks
- You can use
then()to all ofNSObjectsubclasses.
``swift let queue = OperationQueue().then { $0.maxConcurrentOperationCount = 1 } ``
- Want to use with your own types? Just make extensions.
```swift extension MyType: Then {}
let instance = MyType().then { $0.really = "awesome!" } ```
- Use
with()when copying the value types.
``swift let newFrame = oldFrame.with { $0.size.width = 200 $0.size.height = 100 } newFrame.width // 200 newFrame.height // 100 ``
- Use
do()to do something with less typing.
``swift UserDefaults.standard.do { $0.set("devxoul", forKey: "username") $0.set("devxoul@gmail.com", forKey: "email") $0.synchronize() } ``
Real World Example
Here's an example usage in an UIViewController subclass.
final class MyViewController: UIViewController {
let titleLabel = UILabel().then {
$0.textColor = .black
$0.textAlignment = .center
}
let tableView = UITableView().then {
$0.backgroundColor = .clear
$0.separatorStyle = .none
$0.register(MyCell.self, forCellReuseIdentifier: "myCell")
}
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(self.titleLabel)
self.view.addSubview(self.tableView)
}
}Installation
- Using CocoaPods:
``ruby pod 'Then' ``
- Using Swift Package Manager:
```swift import PackageDescription
let package = Package( name: "MyAwesomeApp", dependencies: [ .Package(url: "https://github.com/devxoul/Then", majorVersion: 2), ] ) ```
License
Then is under MIT license. See the LICENSE file for more info.
Package Metadata
Repository: devxoul/Then
Stars: 4384
Forks: 299
Open issues: 16
Default branch: main
Primary language: swift
License: MIT
Topics: swift, syntactic-sugar
README: README.md