Skip to content

Instantly share code, notes, and snippets.

View MP0w's full-sized avatar
🏍️

Alex Manzella MP0w

🏍️
View GitHub Profile
import Foundation
import UIKit
protocol Interactor: class {
associatedtype ModelType
var model: ModelType { get }
var modelDidUpdate: (() -> Void)? { get set }
}
@MP0w
MP0w / MVVMÇ.md
Last active October 18, 2018 13:46
MVVMÇ

MVVMÇ (MVVM Calçot) is an implementation of MVVM influenced by VIPER. Basically VIPER with MVVM names.
The most important concept of MVVMÇ is that implements MVVM with immutable ViewModels, this helps to write correct and testable code with minor complexity.
Other than this it introduces Interactor and Coordinator to MVVM.

Content

@MP0w
MP0w / gist:0bdbe302806039594ecb4046be59e7ec
Created July 25, 2018 21:04
Render location trace as image
private extension MKMapRect {
func with(offset: UIOffset, size: CGSize) -> MKCoordinateRegion {
let horizontalRatio = self.size.width / Double(size.width)
let verticalRatio = self.size.height / Double(size.height)
let mapRect = MKMapRectInset(self, horizontalRatio * Double(offset.horizontal), verticalRatio * Double(offset.vertical))
var region = MKCoordinateRegionForMapRect(mapRect)
let minSpan = 0.001
region.span = MKCoordinateSpanMake(max(region.span.latitudeDelta, minSpan), max(region.span.longitudeDelta, minSpan))
return region
@MP0w
MP0w / ConstraintPriorityPlayground.swift
Last active February 16, 2017 22:01
Add Strideble to ConstraintPriority
//: Playground - noun: a place where people can play
import Foundation
public struct ConstraintPriority : ExpressibleByFloatLiteral, Equatable, Strideable {
public typealias FloatLiteralType = Float
public typealias Stride = Float
public let value: Float
@MP0w
MP0w / CallRecordMatcher.swift
Created January 13, 2017 11:32
A matcher to spy
//
// CallRecordMatcher.swift
// Verse
//
// Created by Alex Manzella on 13/01/17.
// Copyright © 2017 Verse Technologies, Inc. All rights reserved.
//
import Foundation
import Nimble
@MP0w
MP0w / dummy.swift
Last active January 13, 2017 10:56
Dummy
import Foundation
/// Creates a Test dummy of the needed type!
/// Works with any value type or class (?)
func dummy<T>() -> T {
let size = MemoryLayout<T>.size
let alignment = MemoryLayout<T>.alignment
let p = UnsafeMutableRawPointer.allocate(bytes: size, alignedTo: alignment)
return p.bindMemory(to: T.self, capacity: 1).pointee
@MP0w
MP0w / IntrinsicSizeAwareScrollView.swift
Created November 29, 2016 13:47
A `UIScrollView` subclass that adapts its `intrinsicContentSize` to its `contentSize`
import Foundation
import UIKit
/// A `UIScrollView` subclass that adapts its `intrinsicContentSize` to its `contentSize`
final class IntrinsicSizeAwareScrollView: UIScrollView {
private let keyPath = NSStringFromSelector(#selector(getter: contentSize))
override init(frame: CGRect) {
super.init(frame: frame)
@MP0w
MP0w / ScrollMatcher.swift
Created November 16, 2016 11:52
ScrollMatcher
import Foundation
import UIKit
import Nimble
func scroll(_ axis: UILayoutConstraintAxis) -> ScrollMatcher {
return ScrollMatcher(axis: axis)
}
struct ScrollMatcher: Matcher {
@MP0w
MP0w / SwiftCompilerDebugTime
Created May 3, 2016 09:22
SwiftCompilerDebugTime
-Xfrontend -debug-time-function-bodies
Found somewhere:
pbpaste | egrep '\.[0-9]ms' | sort -t "." -k 1 -n | tail -20
@MP0w
MP0w / CustomLayerView.swift
Created April 14, 2016 13:21
Generic view with custom layer class
class CustomLayerView<T: CALayer>: UIView {
var customLayer: T {
get {
return self.layer as! T
}
}
override class func layerClass() -> AnyClass {
return T.self