January 4, 2017

RxSwiftで`.map { _ in }` が面倒になったら

Categories: 技術 | Tags: #Swift #RxSwift


よくRxSwiftを使っていると、流れてきた値を使わずにVoidとして次に流す時なんかに、
map { _ in } と書くことがあります。

public var viewWillAppear: Observable<Void> {
    return sentMessage(#selector(UIViewController.viewWillAppear(_:)))
        .map { _ in } // { _ in () } や { _ in Void() } でも同様
        .shareReplay(1)
}

ただ、これ毎回書くのも面倒になってきたり、ダサいなぁ…って思ってきたら、

// ※toplevelで定義すること

// 明示的にVoidを返すと丁寧に定義した場合
public func void<T>(_: T) -> Void {
    return Void()
}

// 省略した場合
public func void<T>(_: T) {}

toplevel関数として void を定義してあげて、

public var viewWillAppear: Observable<Void> {
    return sentMessage(#selector(UIViewController.viewWillAppear(_:)))
        .map(void)
        .shareReplay(1)
}

こんな感じで使ってあげるとちょっぴり幸せになれるかも。


written by sgr-ksmt