Skip to content

Instantly share code, notes, and snippets.

View efremidze's full-sized avatar
👨‍💻

Lasha Efremidze efremidze

👨‍💻
View GitHub Profile
class ButtonSubclass: UIButton {
convenience init(title: String) {
self.init()
self.init(type: .system)
self.setTitle(title, for: .normal)
}
}
@efremidze
efremidze / reusableCell.swift
Created July 21, 2017 22:29
UITableView reusable cell block
extension UITableView {
func reusableCell(style: UITableViewCellStyle, reuseIdentifier: String, configureBlock: ((UITableViewCell) -> Void)? = nil) -> UITableViewCell {
if let cell = dequeueReusableCell(withIdentifier: reuseIdentifier) {
configureBlock?(cell)
return cell
}
return UITableViewCell(style: style, reuseIdentifier: reuseIdentifier)
}
}
let sessionManager: SessionManager = {
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders
let sessionManager = SessionManager(configuration: configuration)
let oauthHandler = OAuth2Handler(accessToken: accessToken, refreshToken: refreshToken)
sessionManager.adapter = oauthHandler
sessionManager.retrier = oauthHandler
return sessionManager
}()
@efremidze
efremidze / deferInit.swift
Created June 28, 2017 20:47
Forces didSet to get called on init
import Foundation
class Object<Type> {
var value: Type! {
didSet {
print(value)
}
}
// init(_ value: Type) {
// self.value = value // didSet not called
@efremidze
efremidze / structConvenienceInit.swift
Last active June 19, 2017 22:11
Struct Convenience Initializer
struct Comment {
let text: String
let date: Date
static func make(_ text: String) -> Comment {
return Comment(text: text, date: Date())
}
}
extension UIColor {
convenience init(red: Int, green: Int, blue: Int) {
self.init(red: CGFloat(red) / 255, green: CGFloat(green) / 255, blue: CGFloat(blue) / 255, alpha: 1)
}
class var red: UIColor { return UIColor(red: 255, green: 59, blue: 48) }
class var orange: UIColor { return UIColor(red: 255, green: 149, blue: 0) }
class var yellow: UIColor { return UIColor(red: 255, green: 204, blue: 0) }
class var green: UIColor { return UIColor(red: 76, green: 217, blue: 100) }
class var tealBlue: UIColor { return UIColor(red: 90, green: 200, blue: 250) }
class var blue: UIColor { return UIColor(red: 0, green: 122, blue: 255) }
precedencegroup OptionalAssignmentPrecedence {
associativity: right
lowerThan: AssignmentPrecedence
}
infix operator ?= : OptionalAssignmentPrecedence
public func ?=<T>(optional: inout T?, defaultValue: @autoclosure () -> T?) {
if optional == nil {
optional = defaultValue()
}
}
func +=<K, V>(left: inout [K : V]?, right: [K : V]?) {
right?.forEach { left?[$0] = $1 }
}
func +<K, V>(left: [K : V]?, right: [K : V]?) -> [K : V]? {
guard let left = left else { return right }
guard let right = right else { return left }
return left.reduce(right) { dict, pair in
var dict = dict
dict[pair.0] = pair.1
extension UINavigationBar {
var barColor: UIColor? {
get { return self.backgroundView.backgroundColor }
set { self.backgroundView.backgroundColor = newValue }
}
private var backgroundView: UIView {
return self.subviews.filter { $0 is TransparentView }.first ?? {
let statusBarHeight = UIApplication.shared.isStatusBarHidden ? 20 : UIApplication.shared.statusBarFrame.height
class ResizingTableView: UITableView {
private var heightConstraint: NSLayoutConstraint?
override init(frame: CGRect, style: UITableViewStyle) {
super.init(frame: frame, style: style)
self.addObserver(self, forKeyPath: #keyPath(contentSize), options: .new, context: nil)
}