Skip to content

Instantly share code, notes, and snippets.

View Sorix's full-sized avatar

Vasily Ulianov Sorix

View GitHub Profile
if let selectedIndexPath = methodsTableView?.indexPathForSelectedRow {
if let coordinator = transitionCoordinator {
coordinator.animate(alongsideTransition: { context in
self.methodsTableView?.deselectRow(at: selectedIndexPath, animated: true)
}) { context in
if context.isCancelled {
self.methodsTableView?.selectRow(at: selectedIndexPath, animated: false, scrollPosition: .none)
}
}
} else {
@Sorix
Sorix / CurrentValue.swift
Created October 27, 2019 12:02
Basic publisher implementation to non-combine code
import Foundation
/// An object that wraps a single value and publishes a new element whenever the value changes.
@propertyWrapper struct CurrentValue<Output> {
private let publisher = BasicPublisher()
var value: Output {
didSet {
publisher.handler?(oldValue, wrappedValue)
}
@Sorix
Sorix / safeTest.swift
Last active July 5, 2019 21:31
Array performance test for safe and normal get
import Foundation
import XCTest
extension Collection where Indices.Iterator.Element == Index {
subscript(safe index: Index) -> Iterator.Element? {
return indices.contains(index) ? self[index] : nil
}
}
class PerfomanceTester: XCTestCase {
@Sorix
Sorix / SingleFetchedResultController.swift
Last active January 13, 2018 12:46
NSFetchedResultsController for single object
import CoreData
protocol SingleFetchedResultsControllerDelegate: class {
func controller(didChange anObject: NSFetchRequestResult, for type: SingleFetchedResultsChangeType)
func controller(error: SingleFetchedResultsControllerError)
}
extension SingleFetchedResultsControllerDelegate {
func controller(_ controller: SingleFetchedResultsController<NSFetchRequestResult>, error: SingleFetchedResultsControllerError) { }
}
@Sorix
Sorix / KeyboardRelatedConstraintAnimator.swift
Last active January 11, 2018 22:55
Move view when keyboard appears, changes frame, disappears
import UIKit
/// Animate and modify constraint's constant when keyboard appears, changes frames or disappears.
/// Use-case: move content above keyboard when it appears.
class KeyboardRelatedConstraintAnimator {
unowned let constraint: NSLayoutConstraint
unowned let view: UIView
private var defaultValue: CGFloat
@Sorix
Sorix / UIColor+hex.swift
Created January 27, 2017 13:24
UIColor with hex methods (init from hex, return hex value)
import UIKit
public extension UIColor {
/// Initializes and returns a color object using the specified hex value
///
/// - Parameter hex: hex value, example: `#ffffff` or `ffffff`
public convenience init(hex: String) {
let hexString = hex.trimmingCharacters(in: .whitespacesAndNewlines)
let scanner = Scanner(string: hexString)