Skip to content

Instantly share code, notes, and snippets.

@sundeepgupta
sundeepgupta / CloudKitSnippets.swift
Last active April 11, 2016 16:20
CloudKit Snippets
// Create Record
let record = CKRecord(recordType: "Posting")
record["url"] = self.urlField.text!
record["name"] = self.nameField.text!
// Get Database
let container = CKContainer.defaultContainer()
let database = container.publicCloudDatabase
@sundeepgupta
sundeepgupta / jobextension.swift
Last active April 25, 2016 01:09
Job extension
func loadJobs() {
let sharedDefaults = NSUserDefaults(suiteName: "group.ca.sundeepgupta.job")
if let jobs = sharedDefaults?.arrayForKey("jobs") as? [[String: String]] {
self.jobs = jobs
} else {
sharedDefaults?.setObject([], forKey: "jobs")
}
self.tableView.reloadData()
}
function containsQuestion(message) {
return 1;
}
function containsYou(message) {
return 0;
}
function senderRelationshipType(message) {
return 2;
@sundeepgupta
sundeepgupta / http.js
Created August 11, 2016 14:27
node.js http module
'use strict';
const HTTPS = require('https');
const URL = require('url');
const QueryString = require('querystring');
module.exports = function() {
return {
postJSON: function(url, params) {
const data = JSON.stringify(params);
@sundeepgupta
sundeepgupta / TypeErasureExample.swift
Created February 6, 2017 01:02
Swift Type Erasure Example
import UIKit
protocol Decodable {
func decode() -> Void
}
struct Action {
let decodable: AnyDecodable
}
@sundeepgupta
sundeepgupta / swift-swizzling.swift
Created February 13, 2017 18:00
Swift swizzling
extension TheClass {
class func swizzle(_ original: Selector, with swizzled: Selector, for klass: AnyClass) {
let originalMethod = class_getInstanceMethod(klass, original)
let swizzledMethod = class_getInstanceMethod(klass, swizzled)
method_exchangeImplementations(originalMethod, swizzledMethod)
}
func swizzle(_ original: Selector, with swizzled: Selector) {
let klass: AnyClass! = object_getClass(self)
@sundeepgupta
sundeepgupta / singleton.swift
Last active March 30, 2017 17:14
Swift singleton with initialization injection
class CoreGlobal {
fileprivate static let shared = CoreGlobal()
fileprivate let device: DeviceManager
private class Config {
var deviceManager: DeviceManager?
}
private static let config = Config()
@discardableResult
@sundeepgupta
sundeepgupta / main.swift
Created March 30, 2017 18:39
Dynamically swap AppDelegate at runtime for unit testing in Swift
let appDelegateClass: AnyClass? = NSClassFromString("TEST_TARGET_MODULE_NAME.TestAppDelegate") ?? AppDelegate.self
let classString = NSStringFromClass(appDelegateClass!)
let argv = UnsafeMutableRawPointer(CommandLine.unsafeArgv)
.bindMemory(to: UnsafeMutablePointer<Int8>.self, capacity: Int(CommandLine.argc))
UIApplicationMain(CommandLine.argc, argv, nil, classString)
let semaphore = DispatchSemaphore(value: 0)
asyncFunction() { result in
XCTAssert(result)
semaphore.signal
}
while semaphore.wait(timeout: .now()) == .timedOut {
RunLoop.current.run(until: Date(timeIntervalSinceNow: 3))
}
import Foundation
// MARK: - Public
public struct WebService {
let actionManager: ActionManager
// As public API, optimize for simplicity by only providing a Result and not throwing.
func getProfile(id: String, completion: @escaping (Result<Profile>) -> Void) {
let action = Action<NSNull, Profile>(urlString: "api.com/profile", method: "GET", body: NSNull())