Skip to content

Instantly share code, notes, and snippets.

@SVGreg
SVGreg / Notifier.swift
Last active September 2, 2021 05:50
Simple pure Swift based replacement of NotificationCenter with support of weak observers. Not thread safe.
protocol Observer: AnyObject {
func onNext(_ event: Notifier.Event)
}
class Notifier {
typealias Event = String
class WeakContainer {
private(set) weak var value: Observer?
init(_ value: Observer?) {
import Foundation
import RealmSwift
class RealmService {
static let version: UInt64 = 1
static func configure() {
Realm.Configuration.defaultConfiguration = Realm.Configuration(schemaVersion: version, migrationBlock: migrate)
}
extension UInt {
static var base: UInt {
return 0
}
nonmutating func apply(bits: UInt, to range: ClosedRange<Int>) -> UInt {
let cleanedSelf = self & (~(mask(range)))
let clampedValue = bits & (mask(0...range.count))
return cleanedSelf | (clampedValue << range.lowerBound)
}
@SVGreg
SVGreg / RealmObjectAdapter.swift
Last active June 8, 2020 13:31
Adapter to Realm Object behaviour. Simplifies implementation of miscellaneous data providers, mediators, wrappers, decorators.
import Foundation
import RealmSwift
class RealmObjectAdapter<T: Object> {
func objects() -> Results<T>? {
return try? Realm().objects(T.self)
}
@discardableResult func create(_ value: [String: Any]? = nil) throws -> T {
let object = T()
@SVGreg
SVGreg / PickerViewHandler.swift
Last active June 8, 2020 13:32
Simplest UIPickerView handler implementation
import Foundation
import UIKit
struct PickerIndexPath {
var component: Int
var row: Int
}
class PickerViewHandler: NSObject {
let picker: UIPickerView
@SVGreg
SVGreg / LocationService.swift
Created November 7, 2017 16:08
Simplest and fastest location search service skeleton.
import Foundation
import CoreLocation
typealias LocationCompletion = (_ coordinate: CLLocationCoordinate2D?)->()
class LocationService: NSObject {
static var expirationTime = TimeInterval(60 * 60 * 1)
static let shared = LocationService()
fileprivate let manager = CLLocationManager()
@SVGreg
SVGreg / TextFieldHandler.swift
Last active December 2, 2017 10:32
Simplest UITextField handler
import UIKit
class TextFieldHandler: NSObject, UITextFieldDelegate {
var maxLength: Int?
var prefix: String?
private var textField: UITextField
init(with textField: UITextField) {
@SVGreg
SVGreg / KeyboardHandler.swift
Last active November 7, 2017 16:09
Simplest iOS keyboard handler
import UIKit
class KeyboardHandler {
let scrollView: UIScrollView
let responders: [UIView]
var bottomContentMargin: CGFloat?
init(with scrollView: UIScrollView, responders: [UIView]) {
@SVGreg
SVGreg / TableViewHandler.swift
Last active June 8, 2020 13:32
UITableView handler. Supports: custom cells, sections, headers and footers, edit actions, inserting and deleting, reordering.
import Foundation
import UIKit
protocol ConfigurableCell {
func configure(with data: Any)
}
enum TableHandlerError: Error {
case noData
case invalidSection(Int)