我正在尝试将我的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() {
}
3 回答
您应该对
test
函数使用dynamic
修饰符,以便编译器永远不会内联或舍入对test
函数的访问 .像这样:
dynamic func test() {}
我在遇到同样的问题后添加了这条评论,但现在我已经解决了 .
解决方案对我来说, - 很抱歉,如果这不是你搜索的东西,但希望会帮助其他人解决同样的问题 - 只是为观察到的函数添加了
dynamic
修饰符 .这是代码
没有
dynamic
修饰符,对test的调用不会打印任何东西 .我是RxSwift的新手 .
谢谢@zhongwuzw,我在阅读他的评论后得到了这个想法 .
你可以使用sentMessage:
输出:
或者另一个例子:
输出: