paddingなどを0にする
textView.textContainerInset = UIEdgeInsetsZero
textView.textContainer.lineFragmentPadding = 0
切り上げしないとiOS9で最後の行が切れる
class MyTableViewDelegateProxy: RxTableViewDelegateProxy { | |
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { | |
return [] | |
} | |
} | |
extension UITableView { | |
override public func rx_createDelegateProxy() -> RxScrollViewDelegateProxy { | |
return MyTableViewDelegateProxy(parentObject: self) | |
} |
paddingなどを0にする
textView.textContainerInset = UIEdgeInsetsZero
textView.textContainer.lineFragmentPadding = 0
切り上げしないとiOS9で最後の行が切れる
'atom-text-editor.vim-mode:not(.normal-mode)': | |
'ctrl-j':'vim-mode:activate-normal-mode' |
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)) } | |
} |
func odd(_ n: UInt) -> Bool { | |
if n == 0 { | |
return false | |
} | |
else { | |
return even(n - 1) | |
} | |
} | |
func even(_ n: UInt) -> Bool { |
protocol FileIO { | |
associatedtype T | |
func read() -> Observable<T> | |
func write(new: T) -> Observable<Void> | |
func delete() -> Observable<Void> | |
} | |
class ImageFileIO: FileIO { | |
typealias T = UIImage |
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> { |
// 前提とか | |
// ・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 |
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 |