Skip to content

Instantly share code, notes, and snippets.

View efremidze's full-sized avatar
👨‍💻

Lasha Efremidze efremidze

👨‍💻
View GitHub Profile
protocol Storable {}
extension Storable {
var storedValue: Any? {
get { return UserDefaults.standard["value"] }
nonmutating set { UserDefaults.standard["value"] = newValue }
}
}
struct Storage: Storable {}
let storage = Storage()
storage.storedValue = "🐼"
extension Array {
subscript(safe index: Int, repeated repeated: Bool) -> Element? {
return isEmpty ? nil : self[index % count]
}
}
@efremidze
efremidze / Instantiatable.swift
Last active August 30, 2018 01:50
Instantiate UIViewController Protocol
protocol Instantiatable {}
extension Instantiatable where Self: UIViewController {
static func instantiate() -> Self {
return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: String(describing: self)) as! Self
}
}
extension UIViewController: Instantiatable {}
enum AppStoryboard: String {
case Main
var instance: UIStoryboard {
return UIStoryboard(name: rawValue, bundle: Bundle.main)
}
func viewController<T: UIViewController>(of type: T.Type) -> T {
return instance.instantiateViewController(withIdentifier: type.storyboardId) as! T
}
import UIKit
import AVFoundation
class ResizingImageView: UIImageView {
private var heightConstraint: NSLayoutConstraint?
override var image: UIImage? {
didSet {
_ = heightConstraint.map { NSLayoutConstraint.deactivate([$0]) }
class Messenger {
func log(_ message: String) {
print(message)
}
func logThis() {
DispatchQueue.main.async { [weak self] in
guard let this = self else { return }
this.log("1")
import UIKit
class InsetLabel: UILabel {
var insets = UIEdgeInsets()
override var intrinsicContentSize: CGSize {
var size = super.intrinsicContentSize
size.width += insets.left + insets.right
size.height += insets.top + insets.bottom
private let swizzling: (AnyClass, Selector, Selector) -> () = { forClass, originalSelector, swizzledSelector in
let originalMethod = class_getInstanceMethod(forClass, originalSelector)
let swizzledMethod = class_getInstanceMethod(forClass, swizzledSelector)
method_exchangeImplementations(originalMethod, swizzledMethod)
}
extension UIView {
open override class func initialize() {
// make sure this isn't a subclass
import Foundation
typealias Points = Int
extension Points {
func rank() -> Rank {
return Rank(self)
}
}
protocol SomeProtocol {
associatedtype T
typealias Closure = (T) -> Void
var blocks: [Closure] { get set }
}
class SomeClass<T>: SomeProtocol {
typealias Closure = (T) -> Void
var blocks: [Closure]