A handy collection of more than 370 native Swift 3 extensions to boost your productivity.
v1.3 adds more than 90 new extensions making it the widest extensions library available online for Swift 3 with extensions for more than 36 type . This is the biggest update since library launch! we're so excited
Xcode 8 (or later) with Swift 3. This library is made for iOS 8 or later, however most of the extensions should work on watchOS, tvOS, and macOS
CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:
$ gem install cocoapods
To integrate SwifterSwift into your Xcode project using CocoaPods, specify it in your Podfile :
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!
target '<Your Target Name>' do
pod 'SwifterSwift'
end
Then, run the following command:
$ pod install
Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
You can install Carthage with Homebrew using the following command:
$ brew update $ brew install carthage
To integrate SwifterSwift into your Xcode project using Carthage, specify it in your Cartfile :
github "omaralbeik/SwifterSwift" ~> 1.3.4
Run carthage update to build the framework and drag the built SwifterSwift.framework into your Xcode project.
Add theextensions folder to your Xcode project to use all extensions, or a specific extension.
SwifterSwift is in its early stages, any feedback is appreciated and welcomed. Please refer to the contributing guidelines before participating.
SwifterSwift is a library of over 370 properties and methods , designed to extend Swift's functionality and productivity, staying faithful to the original API design guidelines of swift 3.
Here are some examples:
// Remove duplicates from array [1, 2, 3, 1, 3].removeDuplicates() -> [1, 2, 3] // Return all indexes of specified item ["h", "e", "l", "l", "o"].indexes(of: "l") -> [2, 3] // Shuffle array ["h", "e", "l", "l", "o"].shuffled = ["e", "l", "o", "l", "h"] // Return random item from array [1, 2, 3, 4, 5].randomItem -> 3 // and many others!
// Get and set components from date with ease date.hour = 14 // Check if date is in today Date().isInToday -> true // Add 1 month to current date Date().add(.month, value: 1) // Return date at the beginning of current day Date().beginning(of .day) // Return date at the end of current month Date().end(of .month) // Check if date is in current calendar unit Date().isInCurrent(.month) -> true // Return iso8601 string for date Date().iso8601String -> "2016-08-23T21:26:15.287Z" // Create date from iso8601 string let date = Date(iso8601String: "2016-08-23T21:26:15.287Z") // Create date from DateComponents let date = Date(year: 2016, month: 8, day: 15) // other components set to current let date = Date(hour: 9, minute: 18, second: 1) // other components set to current // Represent date as a string with ease Date().dateString(ofStyle: .medium) -> "Aug 26, 2016" Date().timeString(ofStyle: .short) -> "12:55 AM" Date().dateTimeString() -> "Aug 26, 2016, 12:55:24 AM" // and many others!
// Return count of substring in string
"hello world".count(of "o", caseSensitive: false) -> 2
// Return an array of strings separated by given string
"hello world".split(by: " ") -> ["hello", "world"]
// Return string with no spaces or new lines in beginning and end
"/n Hello ".trimmed -> "Hello"
// Return most common character in string
"swifterSwift is making swift more swifty".mostCommonCharacter -> "i"
// Returns CamelCase of string
"Some variable nAme".camelCased -> "someVariableName"
// Check if string is in valid email format
"omaralbeik@gmail.com".isEmail -> true
// Check if string contains at least one letter and one number
"123abc".isAlphaNumeric -> true
// Reverse string
"123abc".reverse() -> "cba321"
// Return latinized string
"Hèllö Wórld!".latinize() -> "Hello World!"
// Create random string of length
String.random(ofLength: 10) -> "AhEju28kNl"
// Check if string contains one or more instance of substring
"Hello World!".contain("o", caseSensitive: false) -> true
// Check if string contains one or more emojis
"string:man:with:heart_eyes:emojis:fist|type_6:".containEmoji -> true
// Convert string to numbers
"12.12".toDouble -> 12.12
// Encode and decode URLs
"it's easy to encode strings".urlEncoded -> "it's%20easy%20to%20encode%20strings"
"it's%20easy%20to%20encode%20strings".urlDecoded -> "it's easy to encode strings"
// Encode and decode base64
"Hello World!".base64Encoded -> "SGVsbG8gV29ybGQh"
"SGVsbG8gV29ybGQh".base64Decoded = "Hello World!"
// Truncate strings with a trailing
"This is a very long sentence".truncated(toLength: 14, trailing: = "...") -> "This is a very..."
// Repeat a string n times
"s" * 5 -> "sssss"
// NSString has never been easier
let boldString = "this is string".bold.colored(with: .red)
// and many others!
let dict = ["id": 1, "Product-Name": "SwifterSwift"] // Check if key exists in dictionary. dict.has(key: "id") -> true // Lowercase all keys in dictionary. dict.lowercaseAllKeys() -> ["id": 1, "product-name": "SwifterSwift"] // Create JSON Data and string from a dictionary let json = dict.jsonString(prettify: true) // and many others!
// Return square root of a number √ 9 = 3 // Return square power of a number 5 ** 2 = 25 // Return a number plus or minus another number 5 ± 2 = (3, 7) // Return random number in range Int.randomBetween(min: 1, max: 10) = 6 // Return roman numeral for a number 134.romanNumeral = "CXXXIV" // and many others!
SwifterSwift has many great UI extensions:
// Create new UIColor for RGB values let color = UIColor(red: 121, green: 220, blue: 164) // Create new UIColor for a hexadecimal value let color = UIColor(hex: 0x45C91B) // Blend two colors with ease UIColor.blend(UIColor.red, intensity1: 0.5, with: UIColor.green, intensity2: 0.3) // Return hexadecimal value string UIColor.red.hexString -> "#FF0000" // Use Google Material design colors with ease let indigo = UIColor.material.indigo // Return brand colors from more than 30 social brands let facebookColor = UIColor.social.facebook // and many others!
// Set borderColor, borderWidth, cornerRadius, shadowColor, and many other properties from code or storyboard view.cornerRadius = 30 // Set some or all corners radiuses of view. view.roundCorners([.bottomLeft, .topRight], radius: 30) // Add shadow to view view.addShadow(ofColor .black, radius: 3, opacity: 0.5)
// Animate view with completion
view.fadeIn(duration: 1, completion:((Bool) -> Void)?)
view.fadeOut(duration: 1, completion:((Bool) -> Void)?)
view.rotate(byAngle 90, ofType type: .degrees, animated: true, duration: 1, completion: { print("done") })
view.rotate(toAngle -3, ofType type: .radians, animated: false, duration: 1, completion: nil)
view.scale(byOffset: 4, animated: true, duration:1)
view.shake(direction: .horizontal, duration: 1, animationType: .easeOut)
// save screenshot of a view
let image = view.screenShot
// and many others!
// Get distance from another CGPoint. point1.distance(from point2) = 12.45 Multiply a CGPoint with a scalar result = 5 * point // and many others!
// Create a new alert controller from string or Error let alert = UIAlertController(title: "Couldn't sign in", message: "Invalid username or password!") let alert = UIAlertController(title: "Error", error: Error) // show alert with ease alert.show() // and many others!
// Set title, title color and image for all states at once!
button.setTitleForAllStates("Login")
button.setTitleColorForAllStates(UIColor.blue)
button.setImageForAllStates(UIImage(named: "login"))
// or set each of them from code or storyboard
button.titleForHighlighted = "Login"
// and many others!
// Crop images let croppedImage = image.cropped(to CGRect) // Create UIImage from color let image = UIImage(color: UIColor, size: CGSize) // scale to fit width or height let scaledImage = image.scaled(toHeight: CGFloat) let scaledImage = image.scaled(toWidth: CGFloat) // Compress images let compressedImage = image.compressd(quality: 0.3) // get image size image.kilobytesSize = 114 // and many others!
// Download an image from URL in background imageView.download(from url, contentMode: .scaleAspectFit, placeHolder: UIImage?) // Blur image view imageView.blur(withStyle: .light) // and many others!
// Change navigation bar font and color navbar.setTitleFont(UIFont, with color: UIColor.black) // and many others!
// Pop ViewController with completion handler. navController.popViewController(completion: (()->Void)?) // Push ViewController with completion handler. navController.pushViewController(UIViewController, completion: (()->Void)?) // and many others!
// Return index path for last row in section. tableView.indexPathForLastRow(in section: 2) // Scroll to bottom or top of TableView. tableView.scrollToBottom(animated: true) tableView.scrollToTop(animated: true) // and many others!
// Check if app is running in debugging mode
SwifterSwift.isInDebuggingMode
// Check if app is running on simulator
SwifterSwift.isRunningOnSimulator
// Detect screenshots
SwifterSwift.didTakeScreenShot {
print("User did take a screenshot!")
}
// and many others!
Special thanks to:
Mert Akengin for creating project website and helping with unit testing
Abdul Rahman Dabbour for helping document the project
John Doe , This is a random person of our friends who gets us some coffee day to day