Skip to content

Instantly share code, notes, and snippets.

import Combine
precedencegroup SinkPrecedence { }
precedencegroup FilterPrecedence {
associativity: left
higherThan: SinkPrecedence
}
infix operator | : FilterPrecedence
@yesleon
yesleon / UIWindow+AuthenticationSession.swift
Last active July 13, 2020 03:51
A wrapper around ASWebAuthenticationSession and SFAuthenticationSession.
//
// Usage:
//
// Facebook:
//
// 1. Follow this guide (WITHOUT setting up a URL scheme in Xcode):
// https://github.com/fullstackreact/react-native-oauth/issues/76#issuecomment-335902057
//
// 2. call startFacebookAuthenticationSession(appID:completionHandler:) on a window:
//
enum Equality<T: Equatable> {
case equal(T)
case notEqual
}
func == <T: Equatable>(lhs: T, rhs: T) -> Equality<T> {
if lhs == rhs {
return .equal(lhs)
} else {
return .notEqual
import Foundation
let json = """
{
"results":[
{
"blah":"blah",
"nested_object":{
"type":"a",
"id":69,
//
// InteractivePushableNavigationController.swift
// InteractivePushGestureRecognizerExample
//
// Created by Li-Heng Hsu on 2020/3/11.
// Copyright © 2020 Li-Heng Hsu. All rights reserved.
//
import UIKit
@dynamicMemberLookup
protocol JSONType {
subscript(dynamicMember member: String) -> JSONType? { get set }
}
extension JSONType {
subscript(dynamicMember member: String) -> JSONType? {
get { nil }
set { }
}
subscript<T>(type: T.Type) -> T? {
import UIKit
typealias MutableContext<Value> = (@escaping (inout Value) -> Void) -> Void
class MasterViewController: UITableViewController {
var models = [String]()
// 點選 cell 時會呼叫的工廠方法。
func makeDetailViewController(indexPath: IndexPath) -> DetailViewController? {
func makeObject() -> (getter: () -> String, setter: (String) -> Void) {
var text = "Hello "
return (
getter: { text },
setter: { text = $0 }
)
}
let object = makeObject()
@yesleon
yesleon / AsyncTask.swift
Last active June 27, 2019 06:52
A simple wrapper for enabling reactive programming in Swift. Some functionalities require Swift >= 5.1.
// MARK: Core
public typealias DeactivateHandler = () -> Void
public struct AsyncTask<Success, Failure> where Failure: Error {
public var activate: (@escaping (Success) -> Void, @escaping (Failure) -> Void) -> DeactivateHandler
}
extension AsyncTask where Failure == Never {
@yesleon
yesleon / FluentInterface.swift
Created June 26, 2019 08:30
A simple struct for enabling fluent interface writing style in >= Swift 5.1.
@dynamicMemberLookup
public struct FluentInterface<Root> {
public let root: Root
public subscript<Value>(dynamicMember keyPath: WritableKeyPath<Root, Value>) -> (Value) -> Self {
var root = self.root
return { newValue in
root[keyPath: keyPath] = newValue
return FluentInterface(root: root)
}