RxSwift - rx.tap无效

时间:2017-08-09 09:34:28

标签: swift rx-swift rx-cocoa

我有视图控制器。在里面我有看法

lazy var statusView: StatusView = {
       var statusView = StatusView()
        return statusView
}()

内部状态视图我有按钮

lazy var backButton: UIButton = {
        var button = UIButton(type: .system)
        button.titleLabel?.font = UIFont().regularFontOfSize(size: 20)
        return button
  }()

在控制器中我有

override func viewDidLoad() {
        super.viewDidLoad()
        setupRx()
}

func setupRx() {            
        _ = statusView.backButton.rx.tap.subscribe { [weak self] in
            guard let strongSelf = self else { return }
            print("hello")
        }
    }

但是当我点击按钮时,没有任何东西被打印到控制台。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

一般来说没什么不对,但这是一个小隐藏的伎俩。

你用 backButton.rx.tap.subscribe { [weak self] in

但你需要使用 backButton.rx.tap.subscribe { [weak self] _ in ...

您是否注意到第二个版本中的下划线?第二个版本调用方法

public func subscribe(_ on: @escaping (Event<E>) -> Void)
ObservableType的

。在这种情况下,提供了on闭包来传递事件,但我们只是使用下划线忽略此闭包的传入参数

答案 1 :(得分:0)

一旦setupRx返回,看起来订阅就超出了范围。如果您向视图控制器添加DisposeBag并将订阅添加到dispose包,那是否可以解决问题?像这样:

func setupRx() {            
    statusView.backButton.rx.tap
        .subscribe { [weak self] in
            guard let strongSelf = self else { return }
                print("hello")
            }
        }
        .addDisposableTo(self.disposeBag)
}

希望有所帮助。