Skip to content

Instantly share code, notes, and snippets.

struct TableViewSection<T, Cell: UITableViewCell> {
var cellIdentifier: String = ""
var items: [T] = []
var configureCell: (cell: Cell, item: T, indexPath: NSIndexPath) -> Void
}
class TableViewDataSource: NSObject, UITableViewDataSource {
var sections: [TableViewSection<?, ?>] = [] // I want arbitrary T/Cell types here, what do?
// ...
protocol BaseSection {
var cellIdentifier: String { get }
func numberOfRows() -> Int
func registerIdentifier(tableView: UITableView)
func configureCell(cell: UITableViewCell, indexPath: NSIndexPath)
}
class Section<T, Cell: UITableViewCell>: BaseSection {
var rows: [T] = []
var cellIdentifier = ""
let regex = try NSRegularExpression(pattern: mypattern, options: [])
let str = "some string to match"
if let result = regex.firstMatchInString(str, options: [], range: NSMakeRange(0, str.characters.count)) {
print((str as NSString).substringWithRange((result?.rangeAtIndex(1))!))
}

Keybase proof

I hereby claim:

  • I am klundberg on github.
  • I am kevlario (https://keybase.io/kevlario) on keybase.
  • I have a public key ASAXKidIohQbWt66-UXKy-Ek8vejycrMu6F4xoG3oojvTQo

To claim this, I am signing this object:

import UIKit
class ViewController: UIViewController {
// error: 'UISearchController' is only available on iOS 8.0 or newer
var searchController: UISearchController?
// error: Stored properties cannot be marked potentially unavailable with 'introduced='
@available(iOS 8.0, *)
var conditionallyAvailableSearchController: UISearchController?
@klundberg
klundberg / copyonwrite.swift
Last active April 1, 2017 23:27
Encapsulating copy-on-write behavior in a reusable way.
// Written using Swift 3.0.x
fileprivate final class Box<T> {
let unbox: T
init(_ value: T) {
unbox = value
}
}
public struct CopyOnWrite<T: AnyObject> {
@klundberg
klundberg / build.log
Created June 13, 2017 02:20
FutureKit build errors with Xcode 9
/usr/bin/xcrun xcodebuild -workspace /Users/klundberg/workspaces/wayfair-ios/Carthage/Checkouts/FutureKit/FutureKit.xcworkspace -scheme FutureKit\ iOS -configuration Release -derivedDataPath /Users/klundberg/Library/Caches/org.carthage.CarthageKit/DerivedData/FutureKit/3.0.0 -sdk iphoneos ONLY_ACTIVE_ARCH=NO BITCODE_GENERATION_MODE=bitcode CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES clean buildUser defaults from command line:
IDEDerivedDataPathOverride = /Users/klundberg/Library/Caches/org.carthage.CarthageKit/DerivedData/FutureKit/3.0.0
Build settings from command line:
BITCODE_GENERATION_MODE = bitcode
CARTHAGE = YES
CODE_SIGN_IDENTITY =
CODE_SIGNING_REQUIRED = NO
ONLY_ACTIVE_ARCH = NO
SDKROOT = iphoneos11.0
@klundberg
klundberg / SnakeCaseCodingKeys.stencil
Created September 16, 2017 02:28
Sourcery template that adds CodingKeys overrides for Codable types to convert camelCase property names to snake_case in the serialized format.
{% for type in types.based.Codable|!enum %}
public extension {{ type.name }} {
enum CodingKeys: String, CodingKey {
{% for variable in type.variables|instance %}
{% if variable|annotated:"keyOverride" %}
case {{ variable.name }} = "{{ variable.annotations.keyOverride }}"
{% else %}
case {{ variable.name }} = "{{ variable.name|camelToSnakeCase }}"
{% endif %}
{% endfor %}
041f94dcd6f7e66679da2ead9c76e5aaa24f0d17ec559ab354806133340f877095226f2d4bc36a07c4cf1f1e9269bb3bb55970234a0af292c869446ce0f6e8e886;nsirlconnection
@klundberg
klundberg / optional-conditional-collection.swift
Created February 21, 2018 06:39
Conditional conformance in swift 4.1 for optional for some common protocols
extension Optional: Collection where Wrapped: Collection {
public typealias Element = Wrapped.Element
public typealias Index = Wrapped.Index
public func index(after i: Wrapped.Index) -> Wrapped.Index {
switch self {
case let value?:
return value.index(after: i)
case nil:
fatalError() // TODO: ???