Skip to content

Instantly share code, notes, and snippets.

View RuiAAPeres's full-sized avatar
💭
🏔🏃‍♂️

Rui Peres RuiAAPeres

💭
🏔🏃‍♂️
View GitHub Profile
func fetchData(request: NSURLRequest) -> SignalProducer<[Foo], Error> {
return foosFromServer(request).flatMapError {_ in //network failed deal with it}
.flatMapLatest { parseFoos($0).flatMapError {_ in //parse failed deal with it} }
.flatMapLatest { persistFoos($0).flatMapError {_ in //persist failed deal with it} }
.flatMapError { error in loadFoosFromCache().mapError {_ in error} }
}
protocol Foo {
typealias T: Hashable
var foos: [T] { get }
}
struct Bar<T: Equatable>: Foo {
let foos: [T]
init(foos: [T]) {
import Foundation
import ReactiveCocoa
final class PriorityAction<T> {
let identifier : String
let action : Action<Void, [T], Error>
init(identifier: String, action: Action<Void, [T], Error>) {
@RuiAAPeres
RuiAAPeres / gist:0b317796f810839fe706
Last active April 13, 2016 03:29
Monads in Swift -
public final class Box<T>
{
let value : T
public init(_ value : T) {
self.value = value
}
}
func flatten<T>(box : Box<Box <T>>) -> Box <T> {
func curry<T,U,V>(f:(T,U)->V) -> T -> U -> V
{
return {x in { y in f(x,y)}}
}
extension Array {
var decompose : (T,[T])? {
return (count > 0) ? (self[0], Array(self[1..<count])) : nil
}
}
//The magic method
-(id (^)(id,...)) getSelector:(SEL) aSelector forTarget:(id) target withFirstArgument:(id) firstArgument {
id (^blockName)(id,...) = ^id(id values,...) {
id cenas = firstArgument;
SEL theSelector;
NSMethodSignature *aSignature;
NSInvocation *anInvocation;
func sum(lhs : Int)(rhs : Int) -> Int {
return lhs + rhs
}
let sum2 = sum (2)
let pair1 = sum2(rhs: 1)
let pair2 = sum2(rhs: 2)
let pair3 = sum2(rhs: 3)
let pair4 = sum2(rhs: 4)
func something() (int,int) {
return 1,2
}
@RuiAAPeres
RuiAAPeres / gist:11402456
Last active August 29, 2015 14:00
Sam Page's SparkRecording Implementation with Facebook's Pop
//The calculations are coming from [here](https://gist.github.com/d-ronnqvist/11266321) (thanks David!)
- (void)updateAnimations
{
CGFloat duration = self.duration * (1.f - [[self.progressLayers firstObject] strokeEnd]);
CGFloat strokeEndFinal = 1.f;
for (CAShapeLayer *progressLayer in self.progressLayers)
{
POPBasicAnimation *popEndAnimation = [POPBasicAnimation animation];
@RuiAAPeres
RuiAAPeres / gist:11353385
Created April 27, 2014 19:18
Draft new spec ReactiveCocoa
Pod::Spec.new do |s|
s.name = "ReactiveCocoa"
s.version = "2.3"
s.summary = "A framework for composing and transforming streams of values."
s.homepage = "https://github.com/blog/1107-reactivecocoa-is-now-open-source"
s.author = { "Josh Abernathy" => "josh@github.com" }
s.source = { :git => "https://github.com/ReactiveCocoa/ReactiveCocoa.git", :tag => "v#{s.version}" }
s.license = 'MIT'
s.description = "ReactiveCocoa (RAC) is an Objective-C framework for Functional Reactive Programming. It provides APIs for composing and transforming streams of values."