选择器可观察 - RxSwift

Nik*_*nko 2 ios swift rx-swift reactivex rx-cocoa

我正在尝试将我的FRP理解从ReactiveCocoa 2.5迁移到RxSwift,我有一个误解.在ReactiveCocoa中,我rac_signalForSelector想在观察方法的调用时使用.有没有办法使用RxSwift实现这个逻辑?

我写了一个小例子,我想在test方法调用时处理订阅.但是在订阅块中我仍然可以看到一个next(6)事件.我究竟做错了什么?

let subject = PublishSubject<Int>()
subject.takeUntil(self.rx.sentMessage(#selector(test))).subscribe { event in
    print(event)
}

subject.onNext(3)
test()
subject.onNext(6)

//////////////////

func test() {

}
Run Code Online (Sandbox Code Playgroud)

sol*_*ell 6

你可以使用sentMessage:

class ViewController: UIViewController {

    let disposeBag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.rx.sentMessage(#selector(UIViewController.viewWillAppear(_:)))
            .subscribe({ e in
                print(e)
            })
            .addDisposableTo(disposeBag)
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

下一个([0])

或者另一个例子:

class SomeNSObjectClass: NSObject {
}

class ViewController: UIViewController {

    let disposeBag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()

        let myObj = SomeNSObjectClass()
        myObjc.rx.sentMessage(NSSelectorFromString("dealloc"))
            .subscribe({ e in
                print(e)
            })
            .addDisposableTo(disposeBag)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

next([])
完成