Skip to content

Instantly share code, notes, and snippets.

@advantis
advantis / XCTExpectation.swift
Created March 1, 2018 10:27 — forked from ole/XCTExpectation.swift
A variant of XCTKVOExpectation that works with native Swift key paths. To try it out, paste the code into an Xcode playground and observe the unit test output in the console.
import XCTest
/// An expectation that is fulfilled when a Key Value Observing (KVO) condition
/// is met. It's variant of `XCTKVOExpectation` with support for native Swift
/// key paths.
final class KVOExpectation: XCTestExpectation {
private var kvoToken: NSKeyValueObservation?
/// Creates an expectation that is fulfilled when a KVO change causes the
/// specified key path of the observed object to have an expected value.
@advantis
advantis / UIColor.swift
Created November 11, 2015 12:33
UIColor hex utilities
extension UIColor {
convenience init(hexNumber: UInt32) {
let red = CGFloat(hexNumber >> 16 & 0xFF) / 255
let green = CGFloat(hexNumber >> 8 & 0xFF) / 255
let blue = CGFloat(hexNumber & 0xFF) / 255
self.init(red: red, green: green, blue: blue, alpha: 1)
}
convenience init?(hexString: String) {
guard let number = UInt32(hexString, radix: 16) else {
import UIKit
typealias SheetAction = () -> Void
class ActionSheet: UIActionSheet {
private var actions = [SheetAction]()
convenience init() {
self.init(frame: CGRectZero)
delegate = self
@advantis
advantis / Digest.swift
Created February 28, 2015 21:23
SHA1 digest in Swift
import Foundation
func sha1(data: NSData) -> String {
let length = Int(CC_SHA1_DIGEST_LENGTH)
var digest = [UInt8](count: length, repeatedValue: 0)
CC_SHA1(data.bytes, CC_LONG(data.length), &digest)
return digest.map { String(format: "%02x", $0) }.reduce("", +)
}
func sha1(string: String) -> String? {
@advantis
advantis / PixelConstraint.swift
Created January 9, 2015 11:02
Pixel Constraint
import UIKit
private let scale = UIScreen.mainScreen().scale
class PixelConstraint: NSLayoutConstraint {
override var constant: CGFloat {
get { return super.constant / scale }
set(value) { super.constant = value }
}
}
@advantis
advantis / gist:df30597c23e77be40ab5
Created December 10, 2014 07:24
Unexpected crash
var result: Unmanaged<AnyObject>?
SecItemCopyMatching(query, &result)
// Doesn't work on 32-bit platforms (probably due to compiler bug)
return result?.takeUnretainedValue() as? NSData
@advantis
advantis / SegmentedControl.swift
Last active November 15, 2015 08:53
Generic segmented control in Swift
import UIKit
class SegmentedControl: UIControl {
private let action = Selector("selectSegment:")
@IBOutlet
private var segments: [UIButton] = [] {
didSet {
segments.sortInPlace { $0.tag < $1.tag }
subscribe(segments)
@advantis
advantis / FormNavigationController.swift
Last active August 29, 2015 14:09
Form Navigation Controller
//
// Copyright © 2014 Yuri Kotov
//
import UIKit
@objc
protocol FormNavigation {
var nextField: UIResponder? {get}
}
@advantis
advantis / Event.swift
Created September 24, 2014 09:04
C#-inspired event handling in Swift
typealias EventHandler = (AnyObject) -> Void
class Event {
var handlers: [EventHandler] = []
func subscribe(handler: EventHandler) {
handlers.append(handler)
}
dynamic func invoke(sender: AnyObject) {
Вы ранее привлекались за хранение данных в глобальных переменных?
Вы когда-нибудь делали .Net за деньги?
Сформулируйте зависимость времени исправления критического бага от seniority присутствующего менеджера
В своём резюме вы указали знание php. вам не стыдно?
Перед вами кисть, холст и мольберт. напишите компилятор