我有视图控制器。在里面我有看法
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")
}
}
但是当我点击按钮时,没有任何东西被打印到控制台。
我做错了什么?
答案 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)
}
希望有所帮助。