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

CSS для UIKit

3 мая 2017, 11:51
import UIKit


struct ButtonStyles {
    static var circle: Decoration<UIButton> {
        return { (view:UIButton) in
            let size = max(view.bounds.width, view.bounds.height)
            view.layer.cornerRadius = size/2
            view.layer.masksToBounds = true
        }
    }
}

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 )
Ctrl + ↓ Ранее