Skip to content

Instantly share code, notes, and snippets.

@foxicode
foxicode / MD5-Bridging-Header.h
Created February 22, 2020 09:32
Bridging header for MD5 string extension
#import <CommonCrypto/CommonCrypto.h>
@foxicode
foxicode / String+md5.swift
Created February 22, 2020 09:41
Swift String extension to calculate MD5
import Foundation
extension String {
var md5: String? {
let length = Int(CC_MD5_DIGEST_LENGTH)
guard let data = self.data(using: String.Encoding.utf8) else { return nil }
let hash = data.withUnsafeBytes { (bytes: UnsafeRawBufferPointer) -> [UInt8] in
var hash: [UInt8] = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH))
@foxicode
foxicode / String+localized.swift
Created February 22, 2020 10:05
Localized string Swift extension
import Foundation
extension String {
var localized: String {
NSLocalizedString(self, comment: "")
}
}
@foxicode
foxicode / String+subscript.swift
Created February 22, 2020 10:29
Swift String subscript extension
import Foundation
extension String {
subscript (i: Int) -> Character {
return self[index(startIndex, offsetBy: i)]
}
subscript (bounds: CountableRange<Int>) -> Substring {
let start = index(startIndex, offsetBy: bounds.lowerBound)
let end = index(startIndex, offsetBy: bounds.upperBound)
@foxicode
foxicode / String+contains.swift
Created February 23, 2020 20:43
Swift String extension checking if String contains letters or digits
import Foundation
extension String {
var containsOnlyDigits: Bool {
let notDigits = NSCharacterSet.decimalDigits.inverted
return rangeOfCharacter(from: notDigits, options: String.CompareOptions.literal, range: nil) == nil
}
var containsOnlyLetters: Bool {
let notLetters = NSCharacterSet.letters.inverted
@foxicode
foxicode / String+isValidEmail.swift
Created February 23, 2020 20:54
Swift String extension checking if String contains valid email address
import Foundation
extension String {
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)
}
}
@foxicode
foxicode / LoadSave.swift
Created March 3, 2020 18:09
Swift extensions to load and save data
import Foundation
extension Int {
init?(key: String) {
guard UserDefaults.standard.value(forKey: key) != nil else { return nil }
self.init(UserDefaults.standard.integer(forKey: key))
}
func store(key: String) {
UserDefaults.standard.set(self, forKey: key)
@foxicode
foxicode / Data+json.swift
Created March 3, 2020 18:34
Swift extensions for converting dictionaries and arrays to json strings and back
import Foundation
extension Data {
init?(json: Any) {
guard let data = try? JSONSerialization.data(withJSONObject: json, options: .fragmentsAllowed) else { return nil }
self.init(data)
}
func jsonToDictionary() -> [String: Any]? {
(try? JSONSerialization.jsonObject(with: self, options: .allowFragments)) as? [String: Any]
@foxicode
foxicode / String+toInt.swift
Created March 3, 2020 18:41
Swift extension to convert String to Int
import Foundation
extension String {
func toInt() -> Int {
Int(self)!
}
func toIntOrNull() -> Int? {
Int(self)
}
@foxicode
foxicode / UniColor+hex.swift
Last active August 21, 2020 06:01
Swift extension to convert String/Int to UIColor/NSColor and back
#if os(iOS) || os(tvOS)
import UIKit
typealias UniColor = UIColor
#else
import Cocoa
typealias UniColor = NSColor
#endif
private extension Int {
func duplicate4bits() -> Int {