Skip to content

Instantly share code, notes, and snippets.

@danielgalasko
danielgalasko / VersionNumber.swift
Created May 20, 2016 12:26
A clean representation of a semantic version number in swift so you can compare version numbers as if they were numbers
/**
Represents a semantic version number in the form X.Y.Z
Its most useful feature is that it implements `Comparable`
making for easy comparison checks.
*/
struct VersionNumber {
let version: String
init(version: String) {
@danielgalasko
danielgalasko / NSObject+Description.m
Last active August 30, 2016 07:58
Using dictionaryWithValuesForKeys to get a great object description
- (NSString *)description {
//We list the properties and their values using the ever convenient `dictionaryWithValuesForKeys`
//which will get the values of the corresponding properties
NSDictionary *debugProperties = [self dictionaryWithValuesForKeys:@[NSStringFromSelector(@selector(<#Insert property name#>))]];
return [NSString stringWithFormat:@"<%@: %p> %@", self.class, self, debugProperties];
}
@danielgalasko
danielgalasko / Dispatch_After.swift
Last active June 14, 2017 07:06
dispatch_after in Swift - A top level function for delaying code execution
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
@danielgalasko
danielgalasko / UITableViewAndUICollectionView+IndexPathForSubview.swift
Last active January 15, 2020 13:56
Easily retrieve the indexPath of cell's subview in UITableView. Great for button taps and TextFields
extension UITableView {
/**
Returns an index path identifying the row and section
of the cell containing the provided view
:param: cellSubview A subview of any given UITableViewCell in the table. Typically this is either a `UIButton` or `UITextField`
*/
func indexPathForCellWithSubview(cellSubview: UIView) -> NSIndexPath? {
let cellFrame = convertRect(cellSubview.bounds, fromView: cellSubview)
let cellCenter = CGPoint(x: CGRectGetMidX(cellFrame), y: CGRectGetMidY(cellFrame))
@danielgalasko
danielgalasko / UIView+AutoLayout.swift
Last active March 24, 2021 15:47
A UIView extension for common auto layout constraints
extension UIView {
func addConstaintsToPinHorizontalEdgesToSuperView(padding: CGFloat = 0) {
prepareForConstraints()
self.superview!.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-(padding)-[view]-(padding)-|",
options: NSLayoutFormatOptions(0),
metrics: ["padding":padding],
views: ["view":self]))
}
func addConstaintsToPinVerticalEdgesToSuperView(padding: CGFloat = 0) {
@danielgalasko
danielgalasko / RepeatingTimer.swift
Last active March 28, 2024 10:26
A repeating GCD timer that can run on a background queue
/// RepeatingTimer mimics the API of DispatchSourceTimer but in a way that prevents
/// crashes that occur from calling resume multiple times on a timer that is
/// already resumed (noted by https://github.com/SiftScience/sift-ios/issues/52
class RepeatingTimer {
let timeInterval: TimeInterval
init(timeInterval: TimeInterval) {
self.timeInterval = timeInterval
}