XLSwiftKit
By Xmartlabs SRL.
Introduction
XLSwiftKit is a collection of helpers and extensions we use internally. It is a constantly being updated with new snippets. Feel free to use it or to contribute. You can see a list of helper functions and extensions here. Please keep that list updated if you add new functions
Usage
import XLSwiftKit
// your code using XLSwiftKitRequirements
- iOS 9.2+
- Xcode 9.0+
- Swift 4
Getting involved
- If you want to contribute please feel free to submit pull requests.
- If you found a bug or need help please check older issues, FAQ and threads on StackOverflow before submitting an issue..
Before contribute check the CONTRIBUTING file for more info.
If you use XLSwiftKit in your app, We would love to hear about it! Drop us a line on twitter.
Examples
Follow these 3 steps to run Example project: Clone XLSwiftKit repository, open XLSwiftKit workspace and run the Example project.
Installation
CocoaPods
CocoaPods is a dependency manager for Cocoa projects.
To install XLSwiftKit, simply add the following line to your Podfile:
pod 'XLSwiftKit', '~> 3.2.0'Carthage
Carthage is a simple, decentralized dependency manager for Cocoa.
To install XLSwiftKit, simply add the following line to your Cartfile:
github "xmartlabs/XLSwiftKit" ~> 3.2.0
Implemented functions
This is a list of the helper functions and extensions implemented in this pod.
Extensions
NSData
func toJSON() -> AnyObject?: serializes a NSData object to JSON representation
NSDate
func isOver18Years() -> Bool: returns if a date is over 18 years agofunc monthName() -> String: returns the month of a date inMMMMformatfunc year() -> String: returns the year of a date inyyyyformatfunc day() -> String: returns the day of a date inddformat
UIApplication
class func topViewController(base: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController) -> UIViewController?: returns the top most view controller in the view hierarchy considering a base rootViewController.static func changeRootViewController(rootViewController: UIViewController, animated: Bool = true, from: UIViewController? = nil, completion: ((Bool) -> Void)? = nil): changes the rootViewController of the applications main windowstatic func changeRootViewControllerAfterDismiss(from: UIViewController? = nil, to: UIViewController, completion: ((Bool) -> Void)? = nil): Same as the previous one but dismisses the current view controller before changing root view controllerstatic func makePhoneCall(phoneNumber: String) -> Bool: Creates a NSURL with the phoneNumber parameter and opens the URL if possible.var bundleIdentifier: Stringvar buildVersion: Stringvar appVersion: Stringvar bundleName: String
UINavigationBar
func setTransparent(transparent: Bool): Makes the navigationBar transparent or notfunc shake(duration: CFTimeInterval = 0.3): Executes a shake animation on a viewfunc spin(duration: CFTimeInterval, rotations: CGFloat, repeatCount: Float): Spins a view around its z axisstatic public func verticalStackView(views: [UIView], alignLeading: Bool = true, alignTrailing: Bool = true, frame: CGRect? = nil, width: CGFloat = UIScreen.mainScreen().bounds.width) -> UIView: returns a view containing the views passed as parameter as if it was a vertical stack view (putting all views vertically one after the other). Thought to be a iOS 8 alternative to real UIStackViews
UIViewController
func showError(title: String, message: String? = nil): shows an UIAlertController alert with error title and message
Double and Int
func currencyString() -> String?: Returns a formatted currency String from an Int or Double. Currency formatter used is defined underConstants.Formatters.currencyFormatter
String
func isValidAsEmail() -> Bool: Returns if a string is valid as emailfunc isValidAsPhone() -> Bool: Returns if a string is valid as phone numberfunc isNumberString() -> Bool: Returns if a string is composed just of numbers or '-' symbolfunc findFirstNumberInString() -> String?: Returns the first number in a String if foundfunc renderedHeightWithFont(font: UIFont, width: CGFloat) -> CGFloat: Return the height necessary for a text given a width and font size. Same asheightForStringextension on UIFontfunc getFirstAndLastName() -> (String,String)?: Parses a first and a last name from a String. Takes last whitespace as separator for these values.- By conforming the
Stringtype toParametrizedStringprotocol and specifying a parameter format like"{i}":func parametrize(parameters: CustomStringConvertible...) -> String: Replace"{i}"substring with the i-th element ofparameters. For example:"Hey {0}! It's been {1} years!".parametrize("Arnold", 3)gives you"Hey Arnold! It's been 3 years!"parametrize(withDictonary dictonary: [Int: CustomStringConvertible]) -> String: Same behaviour as above but specifying the parameters as a dictonary.
UIImage
init(color: UIColor, size: CGSize = CGSize(width: 1, height: 1))init(view: UIView)init(image: UIImage, scaledToSize: CGSize)class func imageWithColor(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) -> UIImageclass func imageWithView(view: UIView) -> UIImageclass func imageWithImage(image: UIImage, scaledToSize size: CGSize) -> UIImage: Returns a new image scaled to desired sizefunc imageScaledToSize(size: CGSize) -> UIImage: Same as previousfunc saveToCameraRoll(completion: ((succeded: Bool) -> Void)? = nil): Saves an image to Saved Photos Album
UITableView
func setFooterWithSpacing(view: UIView): Adds a footer to a tableView that covers the rest of the screen.func reloadDataAnimated(duration: NSTimeInterval = 0.4, completion: (() -> ())?): Performs areloadDatacall using a cross-dissolve transition.
Dictionary
mutating func merge(dict: [Key: Value]): Merges two dictionaries of the same Key and Value type
UIColor
init(red: Int, green: Int, blue: Int): Creates a color from RGB values between 0 and 255init(netHex:Int): Creates a color from a Hexa string
UIDevice
func maxScreenLength() -> CGFloat: Returns the maximum screen length of the current device
The following helpers return if the device is of certain type depending on the devices maxScreenLength
func iPhone4() -> Boolfunc iPhone5() -> Boolfunc iPhone6() -> Boolfunc iPhone6Plus() -> Bool
Other helpers:
fontSizeForDevice(size: CGFloat, q6: CGFloat = 0.94, q5: CGFloat = 0.86, q4: CGFloat = 0.80) -> CGFloat: Returns the suggested font size for every device (iPhone only).
UIFont
func heightForString(string: NSString, width: CGFloat) -> CGFloat: Return the height necessary for a text given a width and font size. Same asrenderedHeightWithFontextension on String
Helpers
Constraints
func suggestedVerticalConstraint(value: CGFloat, q6: CGFloat = 0.9, q5: CGFloat = 0.77, q4: CGFloat = 0.65) -> CGFloat: Scale a value for a vertical constraint constant depending on the current device. Works for iPhone apps only. All coefficients have reasonable default values for vertical constraintsfunc suggestedHorizontalConstraint(value: CGFloat, q6: CGFloat = 0.9, q5: CGFloat = 0.77, q4: CGFloat = 0.77) -> CGFloat: Scale a value for a horizontal constraint constant depending on the current device. Works for iPhone apps only. All coefficients have reasonable default values for horizontal constraints
Appearances
This is a publis struct with functions inside:
static func removeBackImageIndicatorFromNavigationBar(): Removes the navigation bars backIndicator image
GCDHelper
static let mainQueue: DispatchQueue: Returns the main queuestatic let backgroundQueue: DispatchQueue: Returns a background queuestatic func delay(_ delay: Double, block: @escaping () -> ()): Executes a block after a given delaystatic func runOnMainThread(_ block: @escaping () -> ()): Executes a block on the main threadstatic func runOnBackgroundThread(_ block: @escaping () -> ()): Executes a block on the background queuestatic func synced(_ lock: AnyObject, closure: () -> ()): Locks an object
Box
Box is a Wrapper: e.g. Used to wrap any structs in a class so that they can be used where AnyObject is required
Views
RoundedView,RoundedImageViewandRoundedButtonare subclasses ofUIView,UIImageViewandUIButtonwith a rounded appearance.GradientViewrenders a gradient from an array of colors and a direction specified by thecolorsanddirectionproperties. It spreads the colors evenly through the space.OwnerViewis intended to wrap xib views in order to reuse them in storyboards and also instantiate them in code.- Usage
- Create a subclass of
OwnerView - Set it as the File's Owner of your xib.
- Connect your xib's view outlets to your subclass if any.
- Override
func viewForContent() -> UIView?to provide the xib's view. - Override
func setup()to initialize the view. Your xib's view will be accessible through thecontentViewproperty.
- Create a subclass of
- Usage
Others
public func JSONStringify(value: AnyObject, prettyPrinted: Bool = true) -> String: Converts a JSON object to a printable String
Author
Change Log
This can be found in the CHANGELOG.md file.