Skip to content

Instantly share code, notes, and snippets.

@DocMacFain
DocMacFain / AuthController.swift
Created March 31, 2020 23:15
Generic auth controller
protocol UserType {
associatedtype Input: Content
associatedtype Output: Content
static func signUp(input: Input, on: Request) throws -> Future<AuthResult<Output>>
static func signIn(on: Request) throws -> Future<AuthResult<Output>>
}
struct AuthResult<T: Content>: Content { // where T: Student.Public or T: Organization.Public
let accessToken: AccessToken
@DocMacFain
DocMacFain / GradientView.swift
Created October 30, 2019 08:26
Simple work with gradient
import UIKit
class GradientView: UIView {
override class var layerClass: AnyClass {
return CAGradientLayer.self
}
private var gradientLayer: CAGradientLayer? {
return layer as? CAGradientLayer
public class ActivityIndicator: SharedSequenceConvertibleType {
public typealias Element = Bool
public typealias SharingStrategy = DriverSharingStrategy
private let _lock = NSRecursiveLock()
private let _variable = Variable(false)
private let _loading: SharedSequence<SharingStrategy, Bool>
public init() {
_loading = _variable.asDriver()
@DocMacFain
DocMacFain / main.swift
Created May 27, 2019 23:47
RxFeedback test
import UIKit
import RxSwift
import RxCocoa
import RxFeedback
class ViewController: UIViewController {
@IBOutlet weak var counterLabel: UILabel!
@IBOutlet weak var incrementButton: UIButton!
@DocMacFain
DocMacFain / NibLoadable.swift
Last active November 24, 2018 22:30
Init from storyboard
protocol NibLoadable: class {
static var nib: UINib { get }
}
extension NibLoadable {
static var nib: UINib {
return UINib.init(nibName: String(describing: self), bundle: Bundle(for: self))
}
}
@DocMacFain
DocMacFain / String+Ext.swift
Created November 15, 2018 14:01
Calculation for dynamic size
extension String {
func boundingSize(size: CGSize, attributes: [NSAttributedString.Key: Any]?) -> CGSize {
let attributedString = NSAttributedString(string: self, attributes: attributes)
let options: NSStringDrawingOptions = [.usesLineFragmentOrigin, .usesFontLeading]
let boundedRect = attributedString.boundingRect(with: size, options: options, context: nil)
let width = ceil(boundedRect.width)
let height = ceil(boundedRect.height)
return CGSize(width: width, height: height)
@DocMacFain
DocMacFain / AnotherViewController.swift
Created October 27, 2018 09:43
Swipe to dismiss view controller
import UIKit
class AnotherViewController: UIViewController {
var initialTouchPoint = CGPoint(x: 0, y: 0)
@IBAction func close() {
dismiss(animated: true, completion: nil)
}
@DocMacFain
DocMacFain / Example.swift
Last active September 9, 2018 08:29
NonDI testable
protocol SubChild {
func doSubChildMethod()
}
class SubChildImpl: SubChild {
func doSubChildMethod() {
print("doSubChildMethod")
}
}
@DocMacFain
DocMacFain / Some.swift
Last active December 28, 2017 19:03
Background calculation
class AnotherViewController: UITableViewController {
// 50, 100, 150, 200 слов
let textData = [
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Mollitia, ut?",
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Non, ex, tempore! Voluptate cumque tempora expedita quos sunt ad fuga sequi quo nostrum tempore beatae illo modi eum repudiandae, laborum possimus aspernatur. Repudiandae animi similique atque at ut quas, porro eius cum doloremque, quae laboriosam reprehenderit odit, provident modi magni. Veniam.",
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Provident ipsum ut fuga officiis enim quisquam iure, sapiente praesentium quam quia deserunt minima pariatur, quod rem. Velit eaque dolor, sint aut culpa. Nam dolor odio porro rerum assumenda veniam, eius nulla maiores at voluptates rem esse qui sapiente incidunt corporis provident commodi excepturi iusto eligendi non optio reiciendis. Totam eum nihil tempore odio aliquid placeat. Explicabo vitae necessitatibus mag
@DocMacFain
DocMacFain / optionalExtension.swift
Last active January 2, 2018 15:48
Extension for work with optionals
public protocol OptionalType {
associatedtype Wrapped
var value: Wrapped? { get }
}
extension Optional: OptionalType {
public var value: Wrapped? {
return self
}