Skip to content

Instantly share code, notes, and snippets.

View fernandomatal's full-sized avatar

Fernando Mata fernandomatal

View GitHub Profile
@fernandomatal
fernandomatal / CellNib.swift
Last active August 31, 2019 04:32
Cell nib template file, because every time I need it I open my old projects.
//
// CellNib.swift
// miitiOS
//
// Created by Luis Fernando Mata on 8/31/19.
// Copyright © 2019 Miit. All rights reserved.
//
import UIKit
@fernandomatal
fernandomatal / ArrayDiffs.swift
Created May 21, 2019 09:28
Updates between one and other array
import Foundation
typealias ArrayOrderedUpdates<T: Equatable> = (added: [T], removed: [T])
typealias ArrayNonOrderedUpdates<T: Hashable> = (added: [T], removed: [T])
extension Array where Element: Hashable {
/// Returns values added and removed from arrays. Faster solution that returns a non-ordered array
static func diffArrays(lhs: [Element], rhs: [Element]) -> ArrayNonOrderedUpdates<Element> {
let leftSet = Set(lhs)
let rightSet = Set(rhs)
@fernandomatal
fernandomatal / RuntimeClass.swift
Created March 19, 2019 06:38
Get class with special string identifier on Runtime. Handful if you need to load dynamically a class according to some runtime value.
struct RuntimeClass {
private static var appName: String {
return Bundle.main.infoDictionary![kCFBundleNameKey as String] as! String
}
enum Class {
case Example
fileprivate var name: String {
switch self {
@fernandomatal
fernandomatal / OverrideInfoPlist.swift
Created February 6, 2018 10:37
Override values from Info.plist while building the project
#!/usr/bin/env xcrun --sdk macosx swift
// Use this gist in order to write values in your Info.plist as a run phase
// Remember to add a custom Build Phase in your targets running this file as a first step
import Foundation
let relativePlistFilesFolder = "/YOUR_INFO_LIST_FOLDER/"
let currentDirectoryPath = FileManager.default.currentDirectoryPath
@fernandomatal
fernandomatal / RoundedView.swift
Created November 22, 2016 04:58
A simple view with border and rounded corners that renders on storyboard
import UIKit
@IBDesignable class RoundedView: UIView {
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set(newRadius) {
layer.cornerRadius = newRadius ?? 0
@fernandomatal
fernandomatal / FontSizeThatFits.swift
Last active November 7, 2016 10:38
String extension that returns the best font size to fit certain size
extension String {
func fontSizeThatFitsWidth(size: CGSize, font: UIFont) -> CGFloat {
let testString = self as NSString
var fontSize: CGFloat = 100
let minFontSize: CGFloat = 5
while fontSize > minFontSize {
let testFont = font.fontWithSize(fontSize)
let textSize = testString.sizeWithAttributes([NSFontAttributeName : testFont])
@fernandomatal
fernandomatal / NSError+AFNetworking.swift
Last active September 28, 2016 06:44
An extension to get serialized error data when server sends some data on the error response.
extension NSError {
var serializedErrorData: [String : AnyObject]? {
get {
if let responseData = userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] as? NSData {
if let data = try? NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.AllowFragments) as? [String : AnyObject] {
return data
}
}
return nil
}