Git Hub
коротко
Ctrl + ↑ Позднее

Vapor

2 мая 2017, 11:49

Vapor пример

import Vapor

let drop = Droplet()

drop.get("/"){ request in
    
    var items:[String]=[String]()

    items.append("Andrey")
    items.append("Yuriy")
    items.append("Kirill")
    items.append("Alexey")
    items.append("Alexandr")

    
    return try JSON(node: items)
}

drop.run()

Команда сборки

vapor build

на этапе сборки мы можем увидеть ошибки, если мы накосячили

vapor run

Кастомный контрол

28 апреля 2017, 15:46

синус + косинус
тригонометрия в iOS
sinus
cosinus

π rad = 180°
1° = π/180° = 0.005555556π = 0.01745329252 rad
radians = degrees × π / 180°

User Interfaces 0.02

26 апреля 2017, 20:27
Swift   UI

Алгоритмы

25 апреля 2017, 3:08

Что должен знать Junior
язык, ООП, Паттерны

Сортировка

  • Поразрядная
  • Быстрая
  • Пирамидальная
  • Слиянием
  • Пузырьком + модификации
  • Вставками
  • Шелла
  • Выбором
  • FAQ
  • Топологическая
  • Быстрая с составными ключами

Поиск. Строки и последовательности

  • Точный подстроки в строке
  • Нечеткий поиск
  • Проверка на подпоследовательность
  • Общие подпоследовательности. Дистанция
  • Поиск hcs, lis, his
  • Максимальная повторяющаяся подстрока
  • Общие элементы двух массивов
  • Бинарный поиск
  • Интерполяционный поиск
  • Бинарный поиск с определением ближайших узлов
  • Частный случай lis

Структуры данных

  • Очереди
  • Кучи
  • Двоичная куча
  • Введение в абстрактные структуры
  • АВЛ-деревья
  • Красно-черные деревья
  • Деревья со случайным поиском
  • Слоёные списки (скип-списки)
  • Хеш-таблицы
  • Б, Б+ и Б++ деревья
  • Обходы бинарных деревьев
  • Hashed Array Trees[Перевод]
  • StringBTree
  • Triangle Mesh

Сайт алгоритмов

Кто кого SOLID ?

24 апреля 2017, 12:03

Обстоятельства переменчивы, принципы — никогда
Онорэ Де Бальзак

Скрипт увеличивающий версию билда

23 апреля 2017, 13:22

Скрипт который инкрементирует версию билда при каждой сборке

# Скрипт увеличивающий версию билда
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

Добавляем скрипт в фазы сборки проекта

keywords
version
build

Задержка для SplashScreen на N секунд

22 апреля 2017, 19:23
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        let n = 4.0
        Thread.sleep(forTimeInterval: n)
        
        return true
    }

Swift: Случайное число

15 апреля 2017, 16:33
// random
let randomValue:UInt32 = (arc4random_uniform(100)) // от 0 до 100

Анимация

15 апреля 2017, 16:25

Учимся анимировать сокращая при этом код.

Нашёл клёвую конструкцию

14 апреля 2017, 12:29
typealias Animation = (TimeInterval, ()->Void)
let animation: Animation = (5.0, {
    
})
internal class Node<T> {
    var data: T
    var next: Node<T>?
    
    init(data: T){
        self.data = data
    }
}

internal struct Queue<T> {
    var first, last: Node<T>?
    
    mutating func dequeue() -> T? {
        let pop = first?.data
        first = first?.next
        
        if first == nil {
            last = nil
        }
        
        return pop
    }
    
    mutating func enqueue(data: T){
        if last == nil {
            first = Node(data: data)
            last = first
        } else {
            last?.next = Node( data: data)
            last = last?.next
        }
    }
}
var animations: Queue = Queue<Animation>()

Анимация прямо в playground.

14 апреля 2017, 12:02

Чтобы поиграться с анимацией не создавая проект приложения достаточно использовать playground

playground animation

import UIKit
import PlaygroundSupport

let containerView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 375.0, height: 667.0))


let circle = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 50.0, height: 50.0))
circle.center = containerView.center
circle.layer.cornerRadius = 25.0

let startingColor = UIColor(red: (253.0/255.0), green: (159.0/255.0), blue: (47.0/255.0), alpha: 1.0)
circle.backgroundColor = startingColor

containerView.addSubview(circle);

let rectangle = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 50.0, height: 50.0))
rectangle.center = containerView.center
rectangle.layer.cornerRadius = 5.0

rectangle.backgroundColor = UIColor.white

containerView.addSubview(rectangle)

UIView.animate(withDuration: 2.0, animations: { () -> Void in
    let endingColor = UIColor(red: (255.0/255.0), green: (61.0/255.0), blue: (24.0/255.0), alpha: 1.0)
    circle.backgroundColor = endingColor
    
    let scaleTransform = CGAffineTransform(scaleX: 5.0, y: 5.0)
    
    circle.transform = scaleTransform
    
    let rotationTransform = CGAffineTransform(rotationAngle: 3.14)
    
    rectangle.transform = rotationTransform
})

PlaygroundPage.current.liveView =  containerView

Зарядка для глаз

11 апреля 2017, 15:30

Ребята молодцы, отличная зарядка-разминка для глаз, очень рекомендую
Тут

Segue

4 апреля 2017, 21:01

очень полезный метод для того чтобы передать данные в любой ViewController

override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
        if segue.identifier == "segueAdd" {
            print("segue Add") 
            // тут передаём всё что нам нужно в ViewController который будет вызван при переходе
        }
        
        if segue.identifier == "segueEdit" {
            print("segue Edit")
        }
        
    }

Стоит использовать в связке с presentingViewController для конфигурации родительского контроллера...

presentingViewController.someProps = someValues

Swift: динамическое создание класса

26 марта 2017, 17:20
protocol Runable {
    init()
}

class AdvHandler: Runable{
    
    required init(){
        
    }
    
    func run(){
        print("run class is runnable()")
    }
}


func createInstance<T>(typeThing:T.Type) -> T where T:Runable {
    return typeThing.init()
}

Смысл этого подхода в том что метод createInstance понятия не имеет что за класс он создаёт для клиента.
это открывает большие возможности абстрагирования.
Повышая уровень абстракции.

Применение

let a = createInstance(typeThing: AdvHandler.self) as AdvHandler
        
        a.run()

Synx утилита для реорганицации проекта на xcode

22 марта 2017, 12:12

Synx утилита на ruby

synx project.xcodeproject/

macOS: Модальное окно из NSViewController

18 марта 2017, 20:37

Модальное окно из NSViewController

let aboutVC =  self.storyboard?.instantiateController(withIdentifier: "AboutVC") as! NSViewController
        self.presentViewControllerAsModalWindow(aboutVC )

SOLID

7 марта 2017, 12:19
  1. Single responsibility,
  2. Open-closed,
  3. Liskov substitution,
  4. Interface segregation
  5. Dependency inversion.

Single responsibility,

Принцип одной ответственности.

Open-closed

Модули, классы должны быть открыты для расширения и закрыты для изменения

Liskov — принцип подстановки

Подклассы не могут замещать поведение базового класса.
Подтипы должны дополнять базовые типы.

Собака не должна начать летать, вместо того чтобы лаять.

Interface segregation.

Разделение на интерфейсы.
Лучше иметь много маленьких интерфейсов которые отвечают за что-то одно, чем один большой универсальный интерфейс.

Dependency inversion. — Инверсия зависимостей

Модули верхних уровней не должны зависеть от модулей нижних уровней, и модули должны зависеть от интерфейсов а не от их конкретной реализации

Ctrl + ↓ Ранее