Sugar alternatives and similar libraries
Based on the "Utility" category.
Alternatively, view Sugar alternatives based on common mentions on social networks and blogs.
-
SwifterSwift
A handy collection of more than 500 native Swift extensions to boost your productivity. -
SwiftGen-Storyboard
The Swift code generator for your assets, storyboards, Localizable.strings, … — Get rid of all String-based APIs! -
SwiftGen
The Swift code generator for your assets, storyboards, Localizable.strings, … — Get rid of all String-based APIs! -
SwiftLinkPreview
It makes a preview from an URL, grabbing all the information such as title, relevant texts and images. -
Playbook
📘A library for isolated developing UI components and automatically taking snapshots of them. -
BetterSafariView
A better way to present a SFSafariViewController or start a ASWebAuthenticationSession in SwiftUI. -
SwiftPlantUML
A command-line tool and Swift Package for generating class diagrams powered by PlantUML -
Pythonic.swift
DISCONTINUED. Pythonic tool-belt for Swift – a Swift implementation of selected parts of Python standard library.
InfluxDB - Purpose built for real-time analytics at any scale.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Sugar or a related project?
README
Sugar
Sugar is a sweetener for your Cocoa implementations.
Table of Contents
<!-- TOC depthFrom:2 depthTo:4 withLinks:1 updateOnSave:1 orderedList:0 -->
<!-- /TOC -->
iOS
Application
let appName = Application.name // CFBundleDisplayName : String
let appVersion = Application.version // CFBundleShortVersionString : String
let appExecutable = Application.executable // CFBundleExecutable : String
let appBundle = Application.bundle // CFBundleIdentifier : String
let appSchemes = Application.schemes // CFBundleURLSchemes : [String]
let mainAppScheme = Application.mainScheme // CFBundleURLSchemes.first : String?
Gain easy access to main bundle information.
Screen
let pixelSize = Screen.pixelSize // CGSize(width: screenWidth * scale, height: screenHeight * scale)
Get the actual pixel information of the device screen.
Simulator
if !Simulator.isRunning {
// add device specific operations here
}
To easily exclude operations from when you as a developer runs the application in the simulator, not subscribing to push notification or running analytics operations etc.
Keyboard Observer
Observe keyboard showing and hiding events, and handle it
let handler = BasicKeyboardHandler()
handler.show = { [weak self] height in
// move text fields up
}
handler.hide = { [weak self] in
// move text fields back to original position
}
keyboardObserver = KeyboardObserver(handler: handler)
Currently support
- BasicKeyboardHandler: basic UIView animation
- InsetKeyboardHandler: animate UIScrollView insets
- ConstraintKeyboardHandler: animate bottom layout constraint
- CustomKeyboardHandler: custom handling
iOS Extensions
UIView
.optimize()
let view = UIView.optimize
/*
clipsToBounds = true
layer.drawsAsynchronously = true
opaque = true
*/
UIImage
+Rendering mode
image.original // imageWithRenderingMode(.AlwaysOriginal)
image.template // imageWithRenderingMode(.AlwaysTemplate)
Shared
SequenceType
let first: Int? = items.findFirst({ $0 > 10 })
Dates
Compare
if date1 < date2 {
// do something
} else if date1 >= date2 {
// do something else
}
Construct
let _ = 5.day
let _ = 3.week
Frame
let view = UIView()
view.width = 200
view.height = 200
view.x = 25
view.y = 25
print(view.width) // prints 200
print(view.height) // prints 200
print(view.x) // prints 25
print(view.y) // prints 25
Grand Central Dispatch
dispatch {
// dispatch in main queue
}
dispatch(queue: .Background) {
// dispatch in background queue
}
lazy var serialQueue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL)
dispatch(queue: .Custom(serialQueue)) {
// dispatch in a serial queue
}
Easy dispatching with grand central dispatch.
Support all the regular global queues: Main
, Interactive
, Initiated
, Utility
, Background
.
And .Custom()
for your own dispatch queues.
Localization
let string = localizedString("My Profile")
let formattedString = localizedString(key: "%d numbers", arguments: 10)
Swift access (pun intended) to NSLocalizedString
, you will get more valid auto completion
with this one, we promise.
Once
let once = Once()
once.run {
// do something
}
once.run {
// no effect
}
Operators
var url = NSURL(string: "hyper.no")!
url ?= NSURL(string: "\\/http")
// url is equal to hyper.no
The ?=
only assigns values if the right is not nil.
Range
let acceptable = 200..<300
if acceptable.contains(response.statusCode) {
// Status code is between 200 and 299.
}
Regex
if "[email protected]".isEmail() {
// Is email
}
let stringNumber = "1984"
if stringNumber.isNumber() {
// Is a number
}
if stringNumber.matches("^[0-9]+$") {
// Is a number
}
Shared Extensions
+Queueable
struct Object: Queueable {
func process() -> Bool { return true }
}
let myQueue = [Object(), Object()]
myQueue.processQueue()
Make your own processing queue with ease, just make your object conform the Queueable
.
public protocol Queueable {
func process() -> Bool
}
URLStringConvertible
let urlString = "https://hyper.no"
let url = urlString.url
Highly inspired by / borrowed from Alamofire's implementation of URLStringConvertible.
Core Foundation
let string = "hyper/oslo"
string.length // 10
string.truncate(5) // hyper...
string.split(/) // ["hyper", oslo]
if string.isPresent {
// do something
}
if string.contains("hyper") {
// found hyper
}
var dirtyString = " hyper "
print(dirtyString.trim()) // prints "hyper"
Just some extra sugar on top of String
for getting the length, truncating, trimming or splitting a String
.
isPresent
is the opposite of isEmpty
.
contains
and be used to check if a string contains a word or pharse.
Swizzler
class Swizzled: NSObject {
override class func initialize() {
struct Static {
static var token: dispatch_once_t = 0
}
if self !== Swizzled.self {
return
}
dispatch_once(&Static.token) {
Swizzler.swizzle("method", cls: self)
}
}
dynamic func method() -> Bool {
return true
}
func swizzled_method() -> Bool {
return false
}
}
let object = Swizzled()
object.method() // false
Everyday we are swizzling, this use to be mundane, now it just Swiftling, we mean, super fast.
Then
let UIView().then {
$0.backgroundColor = UIColor.blackColor()
}
This implementation is brought to you by @devxoul by his awesome Then repository.
Type Alias
public typealias JSONArray = [[String : AnyObject]]
public typealias JSONDictionary = [String : AnyObject]
UITesting
if UITesting.isRunning {
// tests are running
} else {
// everything is fine, move along
}
To easily include or exclude operations for when you are running UI tests.
UnitTesting
if UnitTesting.isRunning {
// running test
}
func testPerformance() {
let measurement = measure {
// run operation
}
}
Check if you are running UniTests and to measure performance.
Installation
Sugar is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'Sugar'
Sugar is also available through Carthage. To install just write into your Cartfile:
github "hyperoslo/Sugar"
Sugar is also available through Swift Package Manager.
- iOS: Open Xcode, File->Swift Packages, search input https://github.com/hyperoslo/Sugar.git, and then select Version Up to Next Major 5.0.1 < .
- Or add dependencies in your
Package.swift
:ruby .package(url: "https://github.com/hyperoslo/Sugar.git", .upToNextMajor(from: "5.0.1")),
Author
Hyper Interaktiv AS, [email protected]
License
Sugar is available under the MIT license. See the LICENSE file for more info.
*Note that all licence references and agreements mentioned in the Sugar README section above
are relevant to that project's source code only.