✨ 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.let queue = OperationQueue().then { $0.maxConcurrentOperationCount = 1 }
-
Want to use with your own types? Just make extensions.
extension MyType: Then {} let instance = MyType().then { $0.really = "awesome!" }
-
Use
with()when copying the value types.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.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:
-
Using Swift Package Manager:
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.