Skip to content

Instantly share code, notes, and snippets.

View AliSoftware's full-sized avatar

Olivier Halligon AliSoftware

View GitHub Profile

Keybase proof

I hereby claim:

  • I am AliSoftware on github.
  • I am aligatr (https://keybase.io/aligatr) on keybase.
  • I have a public key whose fingerprint is 172F 2268 1A5A BD88 4FFF D1B3 F6D2 6970 231A FBDE

To claim this, I am signing this object:

@AliSoftware
AliSoftware / Coordinator.swift
Last active July 10, 2022 14:32
Coordinators & StateMachine - Concept
struct Coordinator {
let window: UIWindow
let navCtrl: UINavigationController?
func start() {
presentWelcomeScreen()
}
private func presentWelcomeScreen() {
let vc = WelcomeScreenViewController() // Instanciate from code, XIB, Storyboard, whatever your jam is
@AliSoftware
AliSoftware / dict-release-crash.swift
Last active February 9, 2016 13:17
Crash with EXC_BAD_ACCESS on release
enum Crash: ErrorType { case Key(String) }
func kaboom(str: String) throws -> String {
throw Crash.Key(str)
}
// Crash with EXC_BAD_ACCESS, not every time but quite often
func test1() throws -> [String:[String]] {
return [
"foo": try [kaboom("test1a"), kaboom("test1b")]
]
@AliSoftware
AliSoftware / ProtocolGenericsSelf.swift
Last active February 13, 2016 00:31
Use of "Self" vs "self" in "static var" + generic protocol implementation
protocol Fooable {
static var staticBigSelf: String { get }
static var staticSmallSelf: String { get }
var instanceBigSelf: String { get }
var instanceSmallSelf: String { get }
init()
}
extension Fooable {
static var staticBigSelf: String { return String(Self) }
func using<T: AnyObject>(object: T, execute: (T) throws -> Void) rethrows -> T {
try execute(object)
return object
}
import UIKit
// Then in some configureView() function of an UIViewController or whatnot…
let label1 = using(UILabel()) {
//: Playground - noun: a place where people can play
import Foundation
// This is a fake implementation mimicking the behavior of having a Localizable.string
// This is used here to be able to test the code easily in a Playground
func localize(key: String) -> String {
return [
"alert.title": "Titre d'Alerte",
"alert.message": "Message d'Alerte",
@AliSoftware
AliSoftware / Generics-Macros.h
Last active December 11, 2020 17:18
ObjCGenerics
// Allow to use generics even if not supported yet
#if __has_feature(objc_generics)
#define NSArrayOf(x) NSArray<x>
#define NSMutableArrayOf(x) NSMutableArray<x>
#define NSDictionaryOf(x,y) NSDictionary<x, y>
#define NSMutableDictionaryOf(x, y) NSMutableDictionary<x, y>
#define NSSetOf(x) NSSet<x>
#define NSMutableSetOf(x) NSMutableSet<x>
#else
#define NSArrayOf(x) NSArray
# Swift 2.0
protocol AbstractAnimal : CustomStringConvertible {
// Abstract, to implement
var firstName: String { get set }
var lastName: String { get set }
// var fullName: String { get } // don't declare it this time!
}
@AliSoftware
AliSoftware / Promises.swift
Last active August 29, 2015 14:16
Swift-Concepts
// For implementing the Promises pattern, I suggest http://promisekit.org
// But here we will build a very simple, naive and limited implementation just to show very basic concepts
import Foundation
/////////////////////
// Promise Pattern (very simplified and naive)
/////////////////////
class Promise<T> {
@AliSoftware
AliSoftware / struct_vs_inheritance.swift
Last active March 27, 2024 11:57
Swift, Struct & Inheritance: How to balance the will of using Struct & Value Types and the need for Inheritance?
// #!Swift-1.1
import Foundation
// MARK: - (1) classes
// Solution 1:
// - Use classes instead of struct
// Issue: Violate the concept of moving model to the value layer
// http://realm.io/news/andy-matuschak-controlling-complexity/