🍯 Powerful, Elegant Syntactical Sugar for Swift 🍯


Enjoy Beutiful Syntactic Enhancements to your swift code base

Simply add Sukari to your initializers

Use .this{} to Initialize Swiftly! 🌈

    let fileManager = FileManager().this {
       $0.urls(for: .applicationDirectory, in: .userDomainMask)

Clean up your initialization Code! ✨

  let tableView : UITableView = {
      let table = UITableView()
      table.backgroundColor = .white
      table.register(UserCell.self, forCellReuseIdentifier: "CellID")
      table.separatorStyle = .none
      table.allowsSelection = false
      return table

Initialize in this way. and and stop repeating yourself! 🚦

let tableView = UITableView().this {
    $0.backgroundColor = .white
    $0.register(UserCell.self, forCellReuseIdentifier: "CellID")
    $0.separatorStyle = .none
    $0.allowsSelection = false

Easily Create and Set Value Types 🛠

let point = CGPoint().set {
      $0.x = 100
      $0.y = 200

Add Sugar to your own Types with a little Extension 🔌

extension CustomType: Sukari {}

let instance = CustomType().this {
      $0.color = .blue
      $0.label.text = "Custom Type"

Make your code base a little Sweeter 🍭

class LoginViewController : UIViewController {
    var loginButton = UIButton().this {
        $0.setTitle("Login", for: .normal)
        $0.backgroundColor = . yellow
        $0.layer.masksToBounds = true
        $0.layer.cornerRadius = 5

     let emailTextField = UITextField().this {
        $0.placeholder = "Email"
        $0.borderStyle = .roundedRect
        $0.font = UIFont.systemFont(ofSize: 14)
        $0.backgroundColor = UIColor(white: 0, alpha: 0.03)
    override func viewDidLoad() {


Unwrap lets you easily require Optional values.

Use unwrap() on any optional that you expect to always be non-nil, or else crash your App with a more (optional) descriptive debug message with .unwrap(debug:)

On top of that, unwrap also provides a sytactic enhancement to easily unwrap optionals through an under-the-hood Guard Statement.

  1. No More if let pyramids and Guard let Towers. only a clean and simple extension to your optionals unwrap
  2. Recieve Rich Debug Information with unwrap(debug:) screen shot 2017-12-19 at 17 35 03

Adopt this simple but effective enhancment to your code base Now!

Guard let tower spotted.

screen shot 2017-12-20 at 12 57 13

Clean, Succinct, and with more descriptive crashes!

screen shot 2017-12-20 at 13 03 52


Call unwrap() on any Optional, optionally giving a debugMessage for debugging purposes:

struct Person {
    let name: String
    let email: String
    init(dictionary: [String: Any]) {
        name = dictionary["name"].unwrap(debug: "Unable to find json Element Name") as! String
        email = dictionary["email"].unwrap(debug: "Unable to find json Element Email") as! String
    let dictionary = ["ame": "Chris", "email": "[email protected]"]
    let chris = Person(dictionary: dictionary)
    print( //Chris
    print( // [email protected]

Another Real-World Example

Without Using Unwrap

class LoginController: UIViewController {
    var token: Token?

    override func viewDidLoad() {
        // more code is more bugs
        guard let unwrappedToken = token else {
            // if this crashes we enter a 'nil' state in our app with no debug information


With Unwrap

class LoginController: UIViewController {
    var token: Token?
    override func viewDidLoad() {


  • For iOS 8+ projects with CocoaPods:
    pod 'Sukari'


Please read for details on our code of conduct, and the process for submitting pull requests to us.


Chris Karani


This project is licensed under the MIT License - see the file for details


🍯 Sweet Syntactical Sugar For Swift

Sukari Info

⭐ Stars 30
🔗 Source Code
🕒 Last Update 9 months ago
🕒 Created 5 years ago
ğŸž Open Issues 1
➗ Star-Issue Ratio 30
ğŸ˜Ž Author chriskarani