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