Skip to content

Instantly share code, notes, and snippets.

/// The Locale for a currency code.
///
/// The returned Locale may only contain currency information.
///
/// - Parameter currencyCode: An ISO currency code. See `Locale.commonISOCurrencyCodes` for a list of supported currency codes.
/// - Returns: The Locale corresponding to the currency code, or nil if its not a vakid currency code.
static func localeFrom(currencyCode: String) -> Locale? {
// Make sure the currency code is supported
guard self.commonISOCurrencyCodes.contains(currencyCode) else { return nil }
@hishma
hishma / smoked_salmon_chowder.md
Last active November 16, 2020 21:01
Smoked Salmon Chowder Recipe

Smoke Salmon Chowder

Bone warming goodness on a cold rainy day.

Ingredients

  • Smoked Salmon (a typical store package seems to work fine)
  • Small container heavy cream
  • Handful of nice small potatoes (red new, yukon gold, whatev)
  • Couple of standard issue carrots
import UIKit
extension UIFont {
/// Returns an instance of the font associated with the text style, specified design, and scaled appropriately for the user's selected content size category.
/// - Parameters:
/// - style: The text style for which to return a font. See UIFont.TextStyle for recognized values.
/// - weight: The weight of the font, specified as a font weight constant. For a list of possible values, see "Font Weights” in UIFontDescriptor. Avoid passing an arbitrary floating-point number for weight, because a font might not include a variant for every weight.
/// - fontDesign: The new system font design.
/// - Returns: A font object of the specified style, weight, and design.
@hishma
hishma / Button.swift
Created April 1, 2020 21:32
Hand rolled button, Heasley style.
import UIKit
class Button: UIControl {
var labelText: String? {
set {
label.text = newValue
}
get {
label.text
}
import UIKit
extension UIButton {
/// Sets the background color to use for the specified button state.
/// - Parameters:
/// - color: The background color to use for the specified state.
/// - forState: The state that uses the specified background color. The values are described in `UIControl.State`.
public func setBackgroundColor(_ color: UIColor, forState: UIControl.State) {
if let colorImage = self.imageWithColor(color) {

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 |

@hishma
hishma / String+RFC3986.swift
Created October 23, 2019 16:02
Percent encode a URL String
import Foundation
extension String {
public func addingPercentEncodingForRFC3986() -> String? {
let unreserved = "-._~/?"
let allowed = NSMutableCharacterSet.alphanumeric()
allowed.addCharacters(in: unreserved)
return self.addingPercentEncoding(withAllowedCharacters: allowed as CharacterSet)
}
@hishma
hishma / VariantHandlingErrorMiddleware.swift
Last active September 15, 2019 00:16
Vapor 3 middleware to respond with errors based on the requested media type
import Vapor
import LeafErrorMiddleware
import APIErrorMiddleware
/// Respond with errors based on the requested media type
public final class VariantHandlingErrorMiddleware: Middleware, ServiceType {
public static func makeService(for container: Container) throws -> Self {
return self.init(environment: container.environment)
}
@hishma
hishma / measure.swift
Created September 3, 2019 17:17
Prints the time taken to execute a closure.
/// Prints the time taken to execute a closure.
///
/// Note: Only for debugging purposes.
public func measure<T>(_ label: String = "", _ f: () throws -> (T)) rethrows -> T {
let startTime = Date()
let result = try f()
let endTime = Date().timeIntervalSince(startTime)
print("\(label): Time taken", endTime)
return result
}
@hishma
hishma / open-hidden-files-on-macos.md
Last active August 30, 2019 15:17
Open hidden files on Mac OS

When the open panel is showing, press Command-Shift-. and the hidden files will appear.