Skip to content

Instantly share code, notes, and snippets.

@ukitaka
ukitaka / DelegateProxy.swift
Created August 25, 2016 05:54
DelegateProxy
class MyTableViewDelegateProxy: RxTableViewDelegateProxy {
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
return []
}
}
extension UITableView {
override public func rx_createDelegateProxy() -> RxScrollViewDelegateProxy {
return MyTableViewDelegateProxy(parentObject: self)
}
@ukitaka
ukitaka / textsize.md
Last active September 3, 2016 15:28
テキストのサイズ計算メモ

paddingなどを0にする

textView.textContainerInset = UIEdgeInsetsZero
textView.textContainer.lineFragmentPadding = 0

切り上げしないとiOS9で最後の行が切れる

@ukitaka
ukitaka / keymap.cson
Created September 12, 2016 05:01
Atom/vim-mode/ex-mode
'atom-text-editor.vim-mode:not(.normal-mode)':
'ctrl-j':'vim-mode:activate-normal-mode'
@ukitaka
ukitaka / TailRec.swift
Created November 12, 2016 06:33
TailRec.swift
class TailRec<A> {
fileprivate init() { }
func flatMap<B>(_ f: @escaping (A) -> TailRec<B>) -> TailRec<B> {
return FlatMap(self, f)
}
func map<B>(_ f: @escaping (A) -> B) -> TailRec<B> {
return flatMap { a in Return(f(a)) }
}
@ukitaka
ukitaka / TailRec.swift
Created November 12, 2016 09:59
Swiftコンパイラの末尾再帰最適化について
func odd(_ n: UInt) -> Bool {
if n == 0 {
return false
}
else {
return even(n - 1)
}
}
func even(_ n: UInt) -> Bool {
@ukitaka
ukitaka / FileIO.swift
Created November 14, 2016 01:43
FileIO
protocol FileIO {
associatedtype T
func read() -> Observable<T>
func write(new: T) -> Observable<Void>
func delete() -> Observable<Void>
}
class ImageFileIO: FileIO {
typealias T = UIImage
@ukitaka
ukitaka / ObservableE.swift
Created November 14, 2016 02:23
Observableでエラーの型を明示的に扱いたい
import RxSwift
import Result
protocol RxError: Error {
init(anyError: Error)
}
typealias ObservableE<T, E: RxError> = Observable<Result<T, E>>
extension Observable {
func asObservableE<Err: RxError>() -> ObservableE<E, Err> {
@ukitaka
ukitaka / Error.swift
Created November 20, 2016 08:36
Error definition
// 前提とか
// ・micro frameworks
// ・DDDのレイヤー化方針に沿ってレイヤー化
// ・RxじゃなくてFuture<T, E: Error>を使ってたときの話
// ・つまりエラー型を明示的に扱う
// ・throwsは型が明確にならないので使わない
// ----------
// 1. 各モジュールはそのモジュールが返しうるエラー型をenumで作る
struct Localizable<T> {
private let values: [LanguageCode:T]
init(values: [LanguageCode:T]) {
self.values = values
}
func value(languageCode: LanguageCode) -> T? {
return values[languageCode]
}
}
// Utils
@ukitaka
ukitaka / VerifiableVariable.swift
Last active November 22, 2016 10:00
VerifiableVariable
public class VerifiableVariable<Element> {
public typealias E = Element
private let _subject: BehaviorSubject<Element>
private let _lock = NSRecursiveLock()
private var _value: E
private let _validation: (Element) -> Bool