ios - 可观察的选择器 - RxSwift

标签 ios swift rx-swift reactivex rx-cocoa

我正在尝试将我对 FRP 的理解从 ReactiveCocoa 2.5 迁移到 RxSwift,但我有一个误解。在 ReactiveCocoa 中,当我想观察方法的调用时,我使用了 rac_signalForSelector。有什么方法可以使用 RxSwift 实现这个逻辑吗?

我写了一个小例子,我想在 test 方法调用时处理订阅。但是在订阅 block 中我仍然可以看到 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() {

}

最佳答案

您可以使用 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)
    }
}

输出:

next([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)
        }
    }
}

输出:

next([])
completed

关于ios - 可观察的选择器 - RxSwift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39708434/

相关文章:

swift - 在 observable 中处理一次性用品的正确方法

ios - UIProgressView 未按预期更新

ios - Swift:子类化 UIViewController 的 Root View

swift - RxSwift BehaviourRelay 自动 isDispose

ios - RxSwift - 无法推断通用参数 'Self'

ios - Collection View 完全加载后如何启动函数?

ios - UITableViewController 不会调用 cellForRowAtIndexPath 但 numberOfSectionsInTableView 和 numberOfRowsInSection 设置正确

ios - 在 cellForRowAtIndexPath : 处增长的事件字节数

javascript - 列表项背景颜色在 Ipad 上不会改变

swift - 如何在 Swift 2.2+ 中编写非 C 类 for 循环?