🍯 Powerful, Elegant Syntactical Sugar for Swift 🍯
Sukari is still under development. We are still defining many things around how Sukari works and how the API works. These decissions might result into breaking changes in the Sake APIs. Once the api's are stable we'll use semantic versioning ensuring that only major versions include breaking changes.
Enjoy Beutiful Syntactic Enhancements that will save you Hundreds Or Thousands of lines of Code
```swift
let fileManager = FileManager().this {
$0.urls(for: .applicationDirectory, in: .userDomainMask)
}
```
let tableView : UITableView = {
let table = UITableView()
table.backgroundColor = .white
table.register(UserCell.self, forCellReuseIdentifier: "CellID")
table.separatorStyle = .none
table.allowsSelection = false
return table
}()
let tableView = UITableView().this {
$0.backgroundColor = .white
$0.register(UserCell.self, forCellReuseIdentifier: "CellID")
$0.separatorStyle = .none
$0.allowsSelection = false
}
extension CustomType: Sukari {}
let instance = CustomType().this {
$0.color = .blue
$0.label.text = "Custom Type"
}
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() {
super.viewDidLoad()
view.addSubview(loginButton)
view.addSubview(emailTextField)
}
}
Unwrap lets you easily require Optional
values to be non-nil
, or crash with ease.
Often Times you have to handle many optionals in your code Using Guard
or If let
in order to unwrap optional values in your code.
This Has Two Problems.
- It Causes Code Congestion, making your code harder to read and maintain
- After Unwrapping with
Guard
orIf let
you recieve absolutely No debuging information.
Unwrap Solves these problems by providing Syntactical Sugar to your code.
Quickly and easy unwrap your optionals with .unwrap
and provide debug information such as which line and file the crash happened with .unwrap(debug:)
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": "chrisbkarani@gmail.com"]
let chris = Person(dictionary: dictionary)
print(chris.name) //Chris
print(chris.email) // chrisbkarani@gmail.com
class LoginController: UIViewController {
var token: Token?
override func viewDidLoad() {
super.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
return
}
LoginService.login(unwrappedToken)
}
}
class LoginController: UIViewController {
var token: Token?
override func viewDidLoad() {
super.viewDidLoad()
LoginService.login(token.unwrap())
}
}
- For iOS 8+ projects with CocoaPods:
pod 'Sukari'
just clone
the repo and run on Xcode
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
This project is licensed under the MIT License - see the LICENSE.md file for details