Skip to content

Instantly share code, notes, and snippets.

@serhii-londar
serhii-londar / AutoLayout+Extension.swift
Created October 8, 2019 22:18 — forked from yawboafo/AutoLayout+Extension.swift
A UIView Extensions to help you constrains a view programatically and simplified
import UIKit
public extension UIView{
func setWith(_ width: CGFloat){
self.widthAnchor.constraint(equalToConstant: width).isActive = true
}
func setHeight(_ width: CGFloat){
self.heightAnchor.constraint(equalToConstant: width).isActive = true
}
@serhii-londar
serhii-londar / IBConstructible.swift
Last active April 15, 2019 11:17
Pure protocol factory for Interface Builder-based views(https://blog.hal.codes/ib-constructible)
protocol IBConstructible: AnyObject {
static var nibName: String { get }
static var bundle: Bundle { get }
}
extension IBConstructible {
static var nibName: String {
return String(describing: Self.self)
}
@serhii-londar
serhii-londar / gist:85e71b3915c033154adf08dd7a6eca9d
Created August 17, 2018 02:43
Swift Tip: Quick Performance Timing
@discardableResult
func measure<A>(name: String = "", _ block: () -> A) -> A {
let startTime = CACurrentMediaTime()
let result = block()
let timeElapsed = CACurrentMediaTime() - startTime
print("Time: \(name) - \(timeElapsed)")
return result
}
let result = measure { (0..<1_000_000).reduce(0, +) }
import UIKit
extension UIButton {
var topConstraints: [NSLayoutConstraint]? {
return self.superview?.constraints.filter( { ($0.firstItem as? UIButton == self && $0.firstAttribute == .top) || ($0.secondItem as? UIButton == self && $0.secondAttribute == .top) })
}
var leftConstraints: [NSLayoutConstraint]? {
return self.superview?.constraints.filter( { ($0.firstItem as? UIButton == self && $0.firstAttribute == .left) || ($0.secondItem as? UIButton == self && $0.secondAttribute == .left) })
}
var rightConstraints: [NSLayoutConstraint]? {
public protocol NotificationName {
var name: Notification.Name { get }
}
public extension RawRepresentable where RawValue == String, Self: NotificationName {
public var name: Notification.Name {
get {
return Notification.Name(self.rawValue)
extension UIWindow {
/// Fix for http://stackoverflow.com/a/27153956/849645
func set(rootViewController newRootViewController: UIViewController, withTransition transition: CATransition? = nil) {
let previousViewController = rootViewController
if let transition = transition {
// Add the transition
layer.add(transition, forKey: kCATransition)
@serhii-londar
serhii-londar / Email Validation Swift
Created January 11, 2018 10:45
Email Validation Swift
/// Validate email string
///
/// - parameter email: A String that rappresent an email address
///
/// - returns: A Boolean value indicating whether an email is valid.
func isValid(_ email: String) -> Bool {
let emailRegEx = "(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}"+"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\"+"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-"+"z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5"+"]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-"+"9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21"+"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"
let emailTest = NSPredicate(format:"SELF MATCHES[c] %@", emailRegEx)
return emailTest.evaluate(with: email)
@serhii-londar
serhii-londar / swift_4_1_ubuntu16_04.sh
Last active November 26, 2018 08:15
Install swift 4.1 on Ubuntu 16.04 bash script
#!/bin/bash
sudo apt-get install clang libicu-dev libcurl4-openssl-dev lldb git wget unzip -y
wget https://swift.org/builds/swift-4.1-release/ubuntu1604/swift-4.1-RELEASE/swift-4.1-RELEASE-ubuntu16.04.tar.gz
tar zxf swift-4.1*.tar.gz && rm -rf swift-4.1*.tar.gz
sudo mv swift-4.1* /swift-4.1
echo "export PATH=/swift-4.1/usr/bin:\"\${PATH}\"" >> ~/.bashrc
source ~/.bashrc