Skip to content

Instantly share code, notes, and snippets.

extension NSCoder {
// works but not optimal
func encodeProtocol<T: SequenceType>(objv: T, forKey key: String) {
let aCollection = objv.map { $0 as! AnyObject }
self.encodeObject(aCollection, forKey: key)
}
// want: func encodeObject<T: SqeuenceType where T.Element is AnyProtocol>(objv: T, forKey key: String) { ... }
@jk
jk / desired_refactoring.swift
Created December 5, 2015 10:24
Desired refactoring
class MyViewController : UIViewController {
func refactorThis() {
if let navigationController = navigationController,
let topViewController = navigatonController.topViewController,
let someProperty = topViewController.someproperty {
someProperty = "new value"
}
}
@jk
jk / response_object.swift
Created July 31, 2015 14:25
Response Object and Collection Serializable
@objc public protocol ResponseObjectSerializable {
init(response: NSHTTPURLResponse, representation: AnyObject)
}
extension Alamofire.Request {
public func responseObject<T:ResponseObjectSerializable>(completionHandler: (NSURLRequest, NSHTTPURLResponse?, T?, NSError?) -> Void) -> Self {
let serializer: Serializer = {
(request, response, data) in
let JSONSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
@jk
jk / image_response_serializer.swift
Created July 31, 2015 14:22
Image Response Serializer for Alamofire
extension Alamofire.Request {
class func imageResponseSerializer() -> Serializer {
return { request, response, data in
if data == nil {
return (nil, nil)
}
let image = UIImage(data: data!, scale: UIScreen.mainScreen().scale)
return (image, nil)
@jk
jk / trailing_closures.swift
Created July 30, 2015 09:21
Closures and trailing closures
let myArray = [1, 2, 3, 4, 5]
let longMap = myArray.map({ (number) in
return number * 10
})
let convienceMap = myArray.map { number in
return number * 10
}
let shortMap = myArray.map { $0 * 10 }
@jk
jk / load_brew_completions.sh
Created July 30, 2015 08:34
Source all homebrew bash completions
if [ -d `brew --prefix`/etc/bash_completion.d ]; then
COMPLETIONS=`brew --prefix`/etc/bash_completion.d/*
for COMPLETION in $COMPLETIONS
do
source $COMPLETION
done
fi
@jk
jk / singleton.swift
Created July 21, 2015 09:26
How to write a correct singleton in Swift. Source: http://krakendev.io/blog/the-right-way-to-write-a-singleton
class TheOneAndOnlyKraken {
static let sharedInstance = TheOneAndOnlyKraken()
}
extension Dictionary {
mutating func unionInPlace(dictionary: Dictionary<Key, Value>) {
for (key, value) in dictionary {
self[key] = value
}
}
mutating func unionInPlace<S: SequenceType where S.Generator.Element == (Key, Value)>(sequence: S) {
for (key, value) in sequence {
self[key] = value
}
@jk
jk / php54-uopz.rb
Created March 8, 2015 10:42
User Operations for Zend — https://github.com/krakjoe/uopz
require File.expand_path("../../Abstract/abstract-php-extension", __FILE__)
class Php54Uopz < AbstractPhp54Extension
init
homepage 'http://php.net/manual/en/book.uopz.php'
url 'https://github.com/krakjoe/uopz/archive/v2.0.7.tar.gz'
sha1 '9b49b52954046d7d4b3d41a8ca8f44f724795f8a'
head 'https://github.com/krakjoe/uopz.git'
version '2.0.7'
@jk
jk / clean_vendor_directory.sh
Created February 12, 2015 06:40
Within composer's vendor directory MUST NOT contain any modification. This script cleans it up for git repos.
#!/bin/sh
GIT=`which git`
GIT_DIRS=`find vendor -name .git -type d`
for GIT_DIR in $GIT_DIRS; do
if [ -d "${GIT_DIR}" ]; then
WORK_TREE=`dirname ${GIT_DIR}`
${GIT} --git-dir=${GIT_DIR} --work-tree=${WORK_TREE} clean -f
fi
done