Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Swift-Extension Files for easy to use in Swift 4.0 version. Need to download file and drag and drop in your Xcode Project.

License

Notifications You must be signed in to change notification settings

ANSCoder/Swift-Extension

Repository files navigation

Swift-Extension

Swift-Extension Files for easy to use in Swift 4.1 version. Need to download file and drag and drop in your Xcode Project.

Documentation

Check here.

Installation

Drag and drop Extension folder inside your project and use it.

Or directly you can copy and paste inside your class. 🚀

Contents 🎉

  • Array
extension Array {
 func atIndex(_ index: Int) -> Element? {
 if index < 0 || index > self.count - 1 {
 return nil
 }
 return self[index]
 }
}
  • UILabel
extension UILabel{
 
 func setLeft(){
 self.textAlignment = .left
 }
 
 func setRight(){
 self.textAlignment = .right
 }
 
 func attribute(_ with: String, effect: String){
 let mainString = [NSAttributedStringKey.foregroundColor: UIColor.black, NSAttributedStringKey.font: UIFont(name: self.font.fontName, size: self.font.pointSize)!]
 let effectString = [NSAttributedStringKey.foregroundColor: UIColor.black, NSAttributedStringKey.font: UIFont.systemFont(ofSize: self.font.pointSize)]
 
 let partOne = NSMutableAttributedString(string: with, attributes: mainString)
 let partTwo = NSMutableAttributedString(string: effect, attributes: effectString)
 
 let combination = NSMutableAttributedString()
 combination.append(partOne)
 combination.append(partTwo)
 self.attributedText = combination
 }
 
 func underline() {
 if let textString = self.text {
 let attributedString = NSMutableAttributedString(string: textString)
 attributedString.addAttribute(NSAttributedStringKey.underlineStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSRange(location: 0, length: attributedString.length))
 attributedText = attributedString
 }
 }
}
  • UIViewController
extension UIViewController{
 
 //MARK:- Aleart View
 func showAleartViewwithTitle(_ title: String, message: String) {
 let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
 alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: nil))
 self.present(alert, animated: true, completion: nil)
 }
 
 func showAlertWithMessage(_ message: String, with completion: (() -> Void)?){
 let alertController = UIAlertController(title: "Message", message: message, preferredStyle: .alert)
 self.present(alertController, animated: true, completion: nil)
 let delay = 3.0 * Double(NSEC_PER_SEC)
 let time = DispatchTime.now() + Double(Int64(delay)) / Double(NSEC_PER_SEC)
 DispatchQueue.main.asyncAfter(deadline: time, execute: {
 alertController.dismiss(animated: true, completion: nil)
 completion?()
 })
 }
 
}
  • UIScrollView
extension UIScrollView {
 
 // Scroll to a specific view so that it's top is at the top our scrollview
 func scrollToView(view:UIView, animated: Bool) {
 if let origin = view.superview {
 UIView.animate(withDuration: 0.4, animations: {
 // Get the Y position of your child view
 let childStartPoint = origin.convert(view.frame.origin, to: self)
 // Scroll to a rectangle starting at the Y of your subview, with a height of the scrollview
 self.scrollRectToVisible(CGRect(x:0, y:childStartPoint.y, width:1, height:self.frame.height), animated: animated)
 })
 }
 }
 
 // Bonus: Scroll to top
 func scrollToTop(animated: Bool) {
 let topOffset = CGPoint(x: 0, y: -contentInset.top)
 setContentOffset(topOffset, animated: animated)
 }
 
 // Bonus: Scroll to bottom
 func scrollToBottom() {
 let bottomOffset = CGPoint(x: 0, y: contentSize.height - bounds.size.height + contentInset.bottom)
 if(bottomOffset.y > 0) {
 setContentOffset(bottomOffset, animated: true)
 }
 }
}
  • UINavigationBar
public extension UINavigationBar {
 
 /// SwifterSwift: Set Navigation Bar title, title color and font.
 ///
 /// - Parameters:
 /// - font: title font
 /// - color: title text color (default is .black).
 public func setTitleFont(_ font: UIFont, color: UIColor = .black) {
 var attrs = [NSAttributedStringKey: Any]()
 attrs[.font] = font
 attrs[.foregroundColor] = color
 titleTextAttributes = attrs
 }
 
 /// SwifterSwift: Make navigation bar transparent.
 ///
 /// - Parameter tint: tint color (default is .white).
 public func makeTransparent(withTint tint: UIColor = .white) {
 isTranslucent = true
 backgroundColor = .clear
 barTintColor = .clear
 setBackgroundImage(UIImage(), for: .default)
 tintColor = tint
 titleTextAttributes = [.foregroundColor: tint]
 shadowImage = UIImage()
 }
 
 /// SwifterSwift: Set navigationBar background and text colors
 ///
 /// - Parameters:
 /// - background: backgound color
 /// - text: text color
 public func setColors(background: UIColor, text: UIColor) {
 isTranslucent = false
 backgroundColor = background
 barTintColor = background
 setBackgroundImage(UIImage(), for: .default)
 tintColor = text
 titleTextAttributes = [.foregroundColor: text]
 }
}
  • String
extension String {
 
 public var isNotEmpty: Bool {
 return !isEmpty
 }
 
 var trim: String {
 if self.isNotEmpty {
 return self.trimmingCharacters(in: CharacterSet.whitespaces)
 }else{
 return ""
 }
 }
 
 var trimLine: String {
 if self.isNotEmpty {
 return self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
 }else{
 return ""
 }
 }
 
 var isAlphanumeric: Bool {
 return !isEmpty && range(of: "[^a-zA-Z0-9]", options: .regularExpression) == nil
 }
 
 var isEmail: Bool {
 guard !self.isEmpty else{
 return false
 }
 let emailRegex: String = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
 let emailTest = NSPredicate(format: "SELF MATCHES %@", emailRegex)
 return emailTest.evaluate(with: self)
 }
 
 var isMobile: Bool {
 guard !self.isEmpty else{
 return false
 }
 let phoneRegix = "[123456789][0-9]{8}([0-9]{1})?"
 let phoneTest = NSPredicate(format: "SELF MATCHES %@", phoneRegix)
 return phoneTest.evaluate(with: self)
 }
 
 func changeDate(_ mydate:String) -> String {
 let dateFormatter = DateFormatter()
 dateFormatter.dateStyle = DateFormatter.Style.long
 dateFormatter.dateFormat = "yyyy/M/dd"
 let convertedDate = dateFormatter.date(from: mydate)
 dateFormatter.dateFormat = "MMMM dd, yyyy"
 let date = dateFormatter.string(from: convertedDate!)
 return date
 }
 
 //MARK : - For First Capital letter of String
 private func capitalizingFirstLetter() -> String {
 let first = String(self.prefix(1)).capitalized
 let other = String(self.dropFirst())
 return first + other
 }
 
 mutating func capitalizeFirstLetter() {
 self = self.capitalizingFirstLetter()
 }
 
 func trimWhiteSpace() -> String {
 return self.trimmingCharacters(in: .whitespaces)
 }
 
 //MARK: - Removing space from String
 var removeSpace: String {
 if self.isNotEmpty {
 return self.components(separatedBy: .whitespaces).joined()
 }else{
 return ""
 }
 }
}
  • UITextField
extension UITextField {
 
 func setBorderAndCorner(){
 DispatchQueue.main.async {
 self.layer.borderWidth = 1.0
 self.layer.borderColor = ExFunction.hexStringToUIColor(hex: "61906B").cgColor
 self.layer.cornerRadius = 5
 }
 }
 
 func setLeftPaddingPoints(_ amount:CGFloat){
 let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))
 self.leftView = paddingView
 self.leftViewMode = .always
 }
 
 func setRightPaddingPoints(_ amount:CGFloat) {
 let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))
 self.rightView = paddingView
 self.rightViewMode = .always
 }
 
 var isValidEmail: Bool {
 let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
 let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
 return emailTest.evaluate(with: self.text ?? "")
 }
 
 var isPhoneNumber: Bool {
 do {
 let detector = try NSDataDetector(types: NSTextCheckingResult.CheckingType.phoneNumber.rawValue)
 let matches = detector.matches(in: self.text ?? "", options: [], range: NSMakeRange(0, (self.text ?? "").count))
 if let res = matches.first {
 return res.resultType == .phoneNumber && res.range.location == 0 && res.range.length == (self.text ?? "").count && (self.text ?? "").count == 10
 } else {
 return false
 }
 } catch {
 return false
 }
 }
}
  • Date
extension Date {
 func toString() -> String {
 let dateFormatter = DateFormatter()
 dateFormatter.dateFormat = "dd-MM-yyyy"
 return dateFormatter.string(from: self)
 }
 func toTimeString() -> String {
 let dateFormatter = DateFormatter()
 dateFormatter.dateFormat = "HH:mm"
 return dateFormatter.string(from: self)
 }
}
  • NSMutableAttributedString
extension NSMutableAttributedString {
 
 @discardableResult
 func bold(_ text: String) -> NSMutableAttributedString {
 let attrs = [NSAttributedStringKey.font : UIFont(name: "AvenirNext-Medium", size: 12)!]
 let boldString = NSMutableAttributedString(string: text, attributes: attrs)
 self.append(boldString)
 return self
 }
 
 @discardableResult
 func normal(_ text:String)->NSMutableAttributedString {
 let normal = NSAttributedString(string: text)
 self.append(normal)
 return self
 }
}
  • UIColor (HEX)
 extension UIColor {
 convenience init(hex: String) {
 
 let scanner = Scanner(string: hex)
 scanner.scanLocation = 0
 
 var rgbValue: UInt64 = 0
 
 scanner.scanHexInt64(&rgbValue)
 
 let r = (rgbValue & 0xff0000) >> 16
 let g = (rgbValue & 0xff00) >> 8
 let b = rgbValue & 0xff
 
 self.init(
 red: CGFloat(r) / 0xff,
 green: CGFloat(g) / 0xff,
 blue: CGFloat(b) / 0xff, alpha: 1
 )
 }
}
  • UIImage
extension UIImage {
 
 var toBase64String:String {
 let imageData = UIImagePNGRepresentation(self)
 return imageData!.base64EncodedString(options: .lineLength64Characters)
 }
 
 // Return half- Size version of Current image
 var halfSizeImage: UIImage? {
 
// let halfWidth = 250
// let halfHeight = 250
 
 let halfWidth = self.size.width / 2
 let halfHeight = self.size.height / 2
 
 UIGraphicsBeginImageContext(CGSize(width: halfWidth, height: halfHeight))
 
 self.draw(in: CGRect(x: 0, y: 0, width: halfWidth, height: halfHeight))
 
 let image = UIGraphicsGetImageFromCurrentImageContext()
 
 UIGraphicsEndImageContext()
 
 return image
 }
 
 // Return Quarter- Size version of Current image
 var quarterhalfSizeImage:UIImage? {
 
 let halfWidth = self.size.width / 4
 let halfHeight = self.size.height / 4
 
 UIGraphicsBeginImageContext(CGSize(width: halfWidth, height: halfHeight))
 
 self.draw(in: CGRect(x: 0, y: 0, width: halfWidth, height: halfHeight))
 
 let image = UIGraphicsGetImageFromCurrentImageContext()
 
 UIGraphicsEndImageContext()
 
 return image
 }
 
 
 //Loading Image From Document Directory
 func loadImageFromDocumentDirPath(_ path: String) -> UIImage? {
 let data = try? Data(contentsOf: URL(fileURLWithPath: path))
 if (data != nil){
 let image = UIImage(data: data!)
 return image
 }else{
 return nil
 }
 }
 
}
  • UIImageView
extension UIImageView {
 
 func setRounded() {
 let radius = self.frame.width / 2
 self.layer.cornerRadius = radius
 self.layer.masksToBounds = true
 }
 
 func setCornerRadious() {
 let radius = self.frame.height / 20
 self.layer.cornerRadius = radius
 self.layer.masksToBounds = true
 }
}
  • ExFunction (Public functions for String to Dictionary & Dictionary to String)
public struct ExFunction {
 
 //MARK:- String to Dictionary Conversion
 static func convertStringToDictionary(_ json: String) -> [String: Any] {
 if let data = json.data(using: String.Encoding.utf8) {
 do{
 let json = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions()) as? [String: Any]
 return json ?? [:]
 }catch{
 print(error)
 }
 }
 return [:]
 }
 
 static func getRawJSON(from dictionary:[String: Any]) -> String{
 guard let theJSONData = try? JSONSerialization.data(withJSONObject: dictionary, options: []) else {
 //Handle Error here
 return ""
 }
 let jsonString = String(data: theJSONData, encoding: .ascii) ?? ""
 return jsonString
 }
 
 static func hexStringToUIColor(hex:String) -> UIColor {
 
 var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
 
 if (cString.hasPrefix("#")) {
 cString.remove(at: cString.startIndex)
 }
 
 if ((cString.count) != 6) {
 return UIColor.gray
 }
 
 var rgbValue:UInt32 = 0
 Scanner(string: cString).scanHexInt32(&rgbValue)
 
 return UIColor(
 red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
 green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
 blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
 alpha: CGFloat(1.0)
 )
 }
}

AltStyle によって変換されたページ (->オリジナル) /