Skip to content

Instantly share code, notes, and snippets.

Jeff Johnston hishma

Block or report user

Report or block hishma

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View dateEncodingStrategy.md

TL;DR

If you are using the iso8601 strategy, you may not want to rely on the default Equatable implementation for Date (==) when comparing dates. You can use a good old fashion calendar comparison instead.

Strategies

JSONEncoder and JSONDecoder can both be configured with a strategy (dateEncodingStrategy and dateDecodingStrategy) for encoding and decoding dates. There are four named types in addition to allowing you to provide custom options.

| Strategy | Comment |

View XCTestCase+Error.swift
import XCTest
extension XCTestCase {
/// Asserts that an expression throws a specific error.
///
/// - Parameters:
/// - expression: An expression that can throw an error.
/// - throws: The expected `Error`. Must conform to the `Equatable` protocol.
/// - file: The file in which failure occurred. Defaults to the file name of the test case in which this function was called.
/// - line: The line number on which failure occurred. Defaults to the line number on which this function was called.
View CoreDataErrors.h
/*
CoreDataErrors.h
Core Data
Copyright (c) 2004-2012 Apple Inc.
All rights reserved.
*/
#import <Foundation/NSObject.h>
/* NSError codes for Core Data added errors in NSCocoaErrorDomain. Foundation error codes can be found in <Foundation/FoundationErrors.h>. AppKit error codes can be found in <AppKit/AppKitErrors.h>.
@hishma
hishma / measure.swift
Last active Apr 5, 2019
Time a function in swift
View measure.swift
@discardableResult
static func measure<T>(name: String = "", _ block: () -> T) -> T {
let startTime = CFAbsoluteTimeGetCurrent()
let result = block()
let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
print("Time: \(name) - \(timeElapsed)")
return result
}
@hishma
hishma / updateBuildNumber.sh
Last active Apr 2, 2019
Shell script to update the build number (CFBundleVersion) of the info.plist in the build folder.
View updateBuildNumber.sh
# Shamelessly ripped of from https://blog.curtisherbert.com/automated-xcode-build-numbers-early-2019-edition/
#
git=`sh /etc/profile; which git`
bundleVersion=`"$git" rev-list --all | wc -l | tr -d '[:space:]'`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bundleVersion" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
echo "☛ BUILD NUMBER: ${bundleVersion}"
View AsynchronousOperation.swift
public class AsynchronousOperation: Operation {
@objc private enum State: Int {
case ready, executing, finished
}
private var _state = State.ready
private let stateQueue = DispatchQueue(label: Bundle.main.bundleIdentifier! + ".op.state", attributes: .concurrent)
@objc private dynamic var state: State {
get { return stateQueue.sync { _state } }
View URL+deleteQuery.swift
import Foundation
extension URL {
public mutating func deleteQuery() {
self = self.deletingQuery()
}
public func deletingQuery() -> URL {
guard var components = URLComponents(url: self, resolvingAgainstBaseURL: false) else { return self }
components.query = nil
View CalandarDataTimings.md
Type 1 year 3 Months 1 Month
Room 0.7571389675140381 0.2183990478515625 0.12781500816345215
Building 28.76482093334198 6.858575105667114 3.3860939741134644
View Locale+ISD.swift
extension Locale {
/// The calling code or "country dial in code" of the locale.
/// See https://en.wikipedia.org/wiki/List_of_country_calling_codes#Alphabetical_listing_by_country_or_region
var countryCallingCode: String? {
return isdCode
}
/// The international subscriber dialling (ISD) code of the locale.
var isdCode: String? {
guard let regionCode = self.regionCode else { return nil }
View Locale+regionalIndicatorSymbol.swift
extension Locale {
/// An emoji representation of the locale's region.
var emoji: String? {
return regionalIndicatorSymbol
}
/// The regional indicator symbols are a set of 26 alphabetic Unicode characters (A–Z) intended to be used to encode
/// ISO 3166-1 alpha-2 two-letter country codes in a way that allows optional special treatment.
///
/// These were defined as part of the Unicode 6.0 support for emoji, as an alternative to encoding separate characters for each
You can’t perform that action at this time.