-
-
Save loplopLover/f0f4d8a7e955990de984 to your computer and use it in GitHub Desktop.
Swift usefull extensions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension String | |
{ | |
var length: Int { | |
get { | |
return count(self) | |
} | |
} | |
func contains(s: String) -> Bool | |
{ | |
return (self.rangeOfString(s) != nil) ? true : false | |
} | |
func replace(target: String, withString: String) -> String | |
{ | |
return self.stringByReplacingOccurrencesOfString(target, withString: withString, options: NSStringCompareOptions.LiteralSearch, range: nil) | |
} | |
subscript (i: Int) -> Character | |
{ | |
get { | |
let index = advance(startIndex, i) | |
return self[index] | |
} | |
} | |
subscript (r: Range<Int>) -> String | |
{ | |
get { | |
let startIndex = advance(self.startIndex, r.startIndex) | |
let endIndex = advance(self.startIndex, r.endIndex - 1) | |
return self[Range(start: startIndex, end: endIndex)] | |
} | |
} | |
func subString(startIndex: Int, length: Int) -> String | |
{ | |
var start = advance(self.startIndex, startIndex) | |
var end = advance(self.startIndex, startIndex + length) | |
return self.substringWithRange(Range<String.Index>(start: start, end: end)) | |
} | |
func indexOf(target: String) -> Int | |
{ | |
var range = self.rangeOfString(target) | |
if let range = range { | |
return distance(self.startIndex, range.startIndex) | |
} else { | |
return -1 | |
} | |
} | |
func indexOf(target: String, startIndex: Int) -> Int | |
{ | |
var startRange = advance(self.startIndex, startIndex) | |
var range = self.rangeOfString(target, options: NSStringCompareOptions.LiteralSearch, range: Range<String.Index>(start: startRange, end: self.endIndex)) | |
if let range = range { | |
return distance(self.startIndex, range.startIndex) | |
} else { | |
return -1 | |
} | |
} | |
func lastIndexOf(target: String) -> Int | |
{ | |
var index = -1 | |
var stepIndex = self.indexOf(target) | |
while stepIndex > -1 | |
{ | |
index = stepIndex | |
if stepIndex + target.length < self.length { | |
stepIndex = indexOf(target, startIndex: stepIndex + target.length) | |
} else { | |
stepIndex = -1 | |
} | |
} | |
return index | |
} | |
func isMatch(regex: String, options: NSRegularExpressionOptions) -> Bool | |
{ | |
var error: NSError? | |
var exp = NSRegularExpression(pattern: regex, options: options, error: &error) | |
if let error = error { | |
println(error.description) | |
} | |
var matchCount = exp!.numberOfMatchesInString(self, options: nil, range: NSMakeRange(0, self.length)) | |
return matchCount > 0 | |
} | |
func getMatches(regex: String, options: NSRegularExpressionOptions) -> [NSTextCheckingResult] | |
{ | |
var error: NSError? | |
var exp = NSRegularExpression(pattern: regex, options: options, error: &error) | |
if let error = error { | |
println(error.description) | |
} | |
var matches = exp!.matchesInString(self, options: nil, range: NSMakeRange(0, self.length)) | |
return matches as! [NSTextCheckingResult] | |
} | |
private var vowels: [String] | |
{ | |
get | |
{ | |
return ["a", "e", "i", "o", "u"] | |
} | |
} | |
private var consonants: [String] | |
{ | |
get | |
{ | |
return ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z"] | |
} | |
} | |
func pluralize(count: Int) -> String | |
{ | |
if count == 1 { | |
return self | |
} else { | |
var lastChar = self.subString(self.length - 1, length: 1) | |
var secondToLastChar = self.subString(self.length - 2, length: 1) | |
var prefix = "", suffix = "" | |
if lastChar.lowercaseString == "y" && vowels.filter({x in x == secondToLastChar}).count == 0 { | |
prefix = self[0...self.length - 1] | |
suffix = "ies" | |
} else if lastChar.lowercaseString == "s" || (lastChar.lowercaseString == "o" && consonants.filter({x in x == secondToLastChar}).count > 0) { | |
prefix = self[0...self.length] | |
suffix = "es" | |
} else { | |
prefix = self[0...self.length] | |
suffix = "s" | |
} | |
return prefix + (lastChar != lastChar.uppercaseString ? suffix : suffix.uppercaseString) | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Format int to string to better display | |
*/ | |
extension Int { | |
func format(f: String) -> String { | |
return NSString(format: "%\(f)d", self) as String | |
} | |
} | |
/** | |
* Format double to string to better display | |
*/ | |
extension Double { | |
func format(f: String) -> String { | |
return NSString(format: "%\(f)f", self) as String | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
import UIKit | |
extension UIColor | |
{ | |
/** | |
* Init UIColor with hexadecimal color. Must begin by '#'. | |
*/ | |
convenience init(rgba: String) | |
{ | |
var red: CGFloat = 0.0 | |
var green: CGFloat = 0.0 | |
var blue: CGFloat = 0.0 | |
var alpha: CGFloat = 1.0 | |
if rgba.hasPrefix("#") | |
{ | |
let index = advance(rgba.startIndex, 1) | |
let hex = rgba.substringFromIndex(index) | |
let scanner = NSScanner(string: hex) | |
var hexValue: CUnsignedLongLong = 0 | |
if scanner.scanHexLongLong(&hexValue) | |
{ | |
switch (count(hex)) | |
{ | |
case 3: | |
red = CGFloat((hexValue & 0xF00) >> 8) / 15.0 | |
green = CGFloat((hexValue & 0x0F0) >> 4) / 15.0 | |
blue = CGFloat(hexValue & 0x00F) / 15.0 | |
case 4: | |
red = CGFloat((hexValue & 0xF000) >> 12) / 15.0 | |
green = CGFloat((hexValue & 0x0F00) >> 8) / 15.0 | |
blue = CGFloat((hexValue & 0x00F0) >> 4) / 15.0 | |
alpha = CGFloat(hexValue & 0x000F) / 15.0 | |
case 6: | |
red = CGFloat((hexValue & 0xFF0000) >> 16) / 255.0 | |
green = CGFloat((hexValue & 0x00FF00) >> 8) / 255.0 | |
blue = CGFloat(hexValue & 0x0000FF) / 255.0 | |
case 8: | |
red = CGFloat((hexValue & 0xFF000000) >> 24) / 255.0 | |
green = CGFloat((hexValue & 0x00FF0000) >> 16) / 255.0 | |
blue = CGFloat((hexValue & 0x0000FF00) >> 8) / 255.0 | |
alpha = CGFloat(hexValue & 0x000000FF) / 255.0 | |
default: | |
print("Invalid RGB string, number of characters after '#' should be either 3, 4, 6 or 8") | |
} | |
} | |
else | |
{ | |
println("Scan hex error") | |
} | |
} | |
else | |
{ | |
print("Invalid RGB string, missing '#' as prefix") | |
} | |
self.init(red:red, green:green, blue:blue, alpha:alpha) | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension UIView { | |
var x: CGFloat { | |
get { | |
return self.frame.origin.x | |
} | |
set { | |
var frame: CGRect = self.frame | |
frame.origin.x = newValue | |
self.frame = frame | |
} | |
} | |
var y: CGFloat { | |
get { | |
return self.frame.origin.y | |
} | |
set { | |
var frame: CGRect = self.frame | |
frame.origin.y = newValue | |
self.frame = frame | |
} | |
} | |
var width: CGFloat { | |
get { | |
return self.frame.size.width | |
} | |
set { | |
var frame: CGRect = self.frame | |
frame.size.width = newValue | |
self.frame = frame | |
} | |
} | |
var height: CGFloat { | |
get { | |
return self.frame.size.height | |
} | |
set { | |
var frame: CGRect = self.frame | |
frame.size.height = newValue | |
self.frame = frame | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment