3

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

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

在 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")
        }
    }

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

我究竟做错了什么 ?

4

2 回答 2

4

一般来说没有错,但有一个小隐藏的把戏。

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

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

你注意到第二个版本的下划线了吗?第二个版本调用方法

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

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

于 2017-08-10T15:15:55.330 回答
0

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

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

希望有帮助。

于 2018-02-21T09:35:01.477 回答