Skip to content

Instantly share code, notes, and snippets.

Avatar
🎧
Working from home, Ekb

Aleksey Lobanov alobanov

🎧
Working from home, Ekb
View GitHub Profile
View keybase.md

Keybase proof

I hereby claim:

  • I am alobanov on github.
  • I am robotlegs (https://keybase.io/robotlegs) on keybase.
  • I have a public key ASAJw2lMrtfotr_AXq0swF_jKdscm_OxPh-1uwL0IwM9owo

To claim this, I am signing this object:

View DelayType.swift
enum DelayType {
case immediate()
case constant(time: Double)
case exponential(initial: Double, multiplier: Double, maxDelay: Double)
case custom(closure: (Int) -> Double)
}
extension DelayType {
func make(_ attempt: Int) -> Double {
switch self {
View Middleware.swift
class CheckNilMiddleware: Middleware {
override func check(value: MiddlewareItem) -> MiddlewareItem {
switch value {
case .value(let str):
if str == nil {
return .error("Значение равно nil")
}
default: break
}
@alobanov
alobanov / СompositeTableDatasource.swift
Last active Nov 8, 2017
Пример создания
View СompositeTableDatasource.swift
// создаем корневой контейнер
self.datasource = BaseCompoundItem()
// создаем модели секции
let section1 = SectionCompoundItem(identifier: "Section1", header: "Вселенная MARVEL", footer: "Marvel Comics — американская компания, издающая комиксы, подразделение корпорации «Marvel Entertainment»")
let section2 = SectionCompoundItem(identifier: "Section2", header: "Вселенная DC", footer: "DC Comics — одно из крупнейших и наиболее популярных издательств комиксов, наравне с Marvel Comics")
// создаем модели ячеек
let cap = CellCompoundItem(identifier: "cell2", cellIdentifier: "CellID", title: "Captain America", subtitle: "Стивен Роджерс")
let batman = CellCompoundItem(identifier: "cell5", cellIdentifier: "CellID", title: "Batman", subtitle: "Брюс Вэйн")
@alobanov
alobanov / CellCompoundItem.swift
Last active Nov 3, 2017
Модель ячейки
View CellCompoundItem.swift
// Сделаем нашей модели read only протокол, только с необходимыми полями
protocol CellCompoundItemProtocol {
var title: String? {get}
var subtitle: String? {get}
var cellIdentifier: String {get}
}
class CellCompoundItem: CompoundItemProtocol, CellCompoundItemProtocol {
private let decoratedComposite: CompoundItemProtocol
var title: String?
@alobanov
alobanov / SectionCompoundItem.swift
Last active Nov 8, 2017
Модель секции
View SectionCompoundItem.swift
// Сделаем нашей модели read only протокол, только с необходимыми полями
protocol SectionCompoundItemProtocol {
var header: String? {get}
var footer: String? {get}
}
class SectionCompoundItem: CompoundItemProtocol {
private let decoratedComposite: CompoundItemProtocol
// основные поля которые мы добавили с помощью декоратора
@alobanov
alobanov / BaseCompoundItem.swift
Last active Nov 3, 2017
Базовая модель которая реализует общий протокол CompoundItemProtocol
View BaseCompoundItem.swift
class BaseCompoundItem: CompoundItemProtocol {
var children: [CompoundItemProtocol] = []
let level: CompoundItemLevel
let identifier: String
var items: [CompoundItemProtocol] {
return children
}
// инициализация без параметров создает рутовый элемент структуры
@alobanov
alobanov / CompoundItemProtocol.swift
Last active Nov 3, 2017
Общий интерфейс компонентов. Composite
View CompoundItemProtocol.swift
// уровень вложенности
enum CompoundItemLevel {
case root, section, item
}
protocol CompoundItemProtocol {
// уникальный идентификатор
var identifier: String {get}
// уровень на котором находится элемент
var level: CompoundItemLevel {get}
@alobanov
alobanov / ChainOfResponsibility.swift
Last active Oct 24, 2017
🐝 Цепочка обязанностей — это поведенческий паттерн, позволяющий передавать запрос по цепочке потенциальных обработчиков, пока один из них не обработает запрос.
View ChainOfResponsibility.swift
//: Playground - noun: a place where people can play
import UIKit
enum ChainResult {
case error(NSError)
case success
}
class ValidationValue {
@alobanov
alobanov / factory.swift
Last active Oct 1, 2017
🏭 Фабричный метод — это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
View factory.swift
//: Playground - noun: a place where people can play
import UIKit
// Models
struct UniverseType {
static let marvel = MarvelHero.self
static let dc = DCHero.self
}
You can’t perform that action at this time.