Skip to content

Instantly share code, notes, and snippets.

@yesleon
yesleon / UIWindow+AuthenticationSession.swift
Last active Jul 13, 2020
A wrapper around ASWebAuthenticationSession and SFAuthenticationSession.
View UIWindow+AuthenticationSession.swift
//
// 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:
//
View Equality.swift
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
View codable_polymorphism.swift
import Foundation
let json = """
{
"results":[
{
"blah":"blah",
"nested_object":{
"type":"a",
"id":69,
View InteractivePushableNavigationController.swift
//
// InteractivePushableNavigationController.swift
// InteractivePushGestureRecognizerExample
//
// Created by Li-Heng Hsu on 2020/3/11.
// Copyright © 2020 Li-Heng Hsu. All rights reserved.
//
import UIKit
View JSONType.swift
@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? {
View MutableContext.swift
import UIKit
typealias MutableContext<Value> = (@escaping (inout Value) -> Void) -> Void
class MasterViewController: UITableViewController {
var models = [String]()
// 點選 cell 時會呼叫的工廠方法。
func makeDetailViewController(indexPath: IndexPath) -> DetailViewController? {
View makeObject.swift
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 Jun 27, 2019
A simple wrapper for enabling reactive programming in Swift. Some functionalities require Swift >= 5.1.
View AsyncTask.swift
// 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 Jun 26, 2019
A simple struct for enabling fluent interface writing style in >= Swift 5.1.
View FluentInterface.swift
@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)
}
View Endpoint.swift
import Foundation
// 基礎協定
// 每個套用 Endpoint 的型別都有固定的回傳型別,所以如果回傳的型別不同,就要宣告不同的 Endpoint 型別。
protocol Endpoint {
// Endpoint 所關聯的回傳型別
associatedtype Result: Codable
You can’t perform that action at this time.