Skip to content
/ Then Public
forked from devxoul/Then

✨ Super sweet syntactic sugar for Swift initializers

License

Notifications You must be signed in to change notification settings

Woollim/Then

Repository files navigation

Then

Swift Build Status CocoaPods Carthage compatible

✨ 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 = .blackColor()
  $0.text = "Hello, World!"
}

This is equivalent to:

let label: UILabel = {
  let label = UILabel()
  label.textAlignment = .Center
  label.textColor = .blackColor()
  label.text = "Hello, World!"
  return label
}()

Tips and Tricks

  • You can use then() to all of NSObject subclasses.

    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

  • For iOS 8+ projects with CocoaPods:

    pod 'Then', '~> 1.0'
  • For iOS 8+ projects with Carthage:

    github "devxoul/Then" ~> 1.0
    
  • For iOS 7 projects with CocoaSeeds:

    github 'devxoul/Then', '1.0.3', :files => 'Sources/*.swift'
  • Using Swift Package Manager:

    import PackageDescription
    
    let package = Package(
      name: "MyAwesomeApp",
      dependencies: [
        .Package(url: "https://github.com/devxoul/Then", "1.0.3"),
      ]
    )

License

Then is under MIT license. See the LICENSE file for more info.

About

✨ Super sweet syntactic sugar for Swift initializers

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Swift 87.2%
  • Ruby 12.8%