Skip to content

Instantly share code, notes, and snippets.

View st-small's full-sized avatar

Stanislav Shiyanovskiy st-small

  • Kirovohrad, Ukraine
View GitHub Profile
@st-small
st-small / Log.swift
Created February 20, 2022 13:27
Logging In Swift [The Right Way]
import Foundation
enum Log {
enum LogLevel {
case info
case warning
case error
fileprivate var prefix: String {
switch self {
@st-small
st-small / AnalyticsManager.swift
Last active February 20, 2022 13:26
AnalyticsManager
protocol AnalyticsProvider {
func sendAnalyticsEvent(named name: String, metadata: [String : Any]?)
}
import FirebaseAnalytics
struct FirebaseAnalyticsProvider: AnalyticsProvider {
func sendAnalyticsEvent(named name: String, metadata: [String : Any]?) {
Analytics.logEvent(name, parameters: metadata)
}
}
@st-small
st-small / gist:878a2a87917aea0da22772231fc60d4d
Last active July 5, 2021 14:05
Notifications Service Example
public protocol Notificationable {
static var alarmsCache: [String: TimerSound] { get }
static var notificationCenter: UNUserNotificationCenter { get }
static func notificationRequest()
static func checkUsersSettings(completion: @escaping (Bool) -> ())
static func scheduleNotification(alarm: Alarm, interval: TimeInterval)
static func removeNotification(id: String)
static func removeAllPendingNotifications()
/*******************************************************************
Исторически, как, наверное, и многие новички, приходящие в мир iOS (и не только), основным моим приоритетом
было выстраивание архитектуры партерном MVC. С появлением разного рода проектов и поиска решения разных задач,
приходилось искать более гибкие и развернутые решения. Таким образом были рассмотрены варианты:
MVC + Coordinator - подход разгружает часть логики «С» (контроллера), но, в целом, не упрощает пути реализации и не
добавляет читаемости коду. Сверх нагруженность модуля остается. Дополнительные ресурсы на построение класса координатора,
в большинстве случаев, не приносят ожидаемой выгоды.
@st-small
st-small / Swizzling example
Created January 24, 2020 09:43
Swizzling
// Swizzling
extension NSObject {
class func swizzleMethods(origSelector: Selector, withSelector: Selector,
forClass: AnyClass) {
let originalMethod = class_getInstanceMethod(forClass, origSelector)
let swizzledMethod = class_getInstanceMethod(forClass, withSelector)
method_exchangeImplementations(originalMethod!, swizzledMethod!)
}
@st-small
st-small / ios-course-notes-db
Last active August 15, 2019 07:09
Save Notes
[{"uid":"CB15904A-3D73-4AA5-8F71-8A90B4972B05","autoRemoveDate":0,"color":{"B":0,"A":1,"G":0.14901960784313725,"R":1},"content":"222222","title":"11111"}]
let lock = NSLock()
var counter: Int = 0 {
didSet{
print("Counter value is \(counter)")
}
}
let thrd1 = Thread {
for _ in 0..<1000 {
lock.lock()
let temp = counter + 1
@st-small
st-small / AttributedString
Created April 10, 2019 14:54
AttributedString
import UIKit
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
// text
let quote = "Haters gonna hate"
// font
let font = UIFont.systemFont(ofSize: 72)
@st-small
st-small / Phantom types
Last active April 10, 2019 12:11
Phantom types
import UIKit
protocol Currency {
static var code: String { get }
static var factor: NSDecimalNumber { get }
}
enum USD: Currency {
static let code = "USD"
static let factor: NSDecimalNumber = 1.0
}
@st-small
st-small / BinarySearch
Created February 19, 2019 15:38
BinarySearch
import Foundation
// Binary search using simple function
func binSearch (list: [Int], value: Int) -> Int?{
if !list.isEmpty{
var indexMin = list.startIndex
var indexMax = list.endIndex-1
while indexMin <= indexMax{