RxSwift - rx.tap 不工作
Posted
技术标签:
【中文标题】RxSwift - rx.tap 不工作【英文标题】:RxSwift - rx.tap not working 【发布时间】:2017-08-09 09:34:27 【问题描述】:我有视图控制器。在里面我有视图
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")
但是当我点击按钮时,控制台没有打印任何内容。
我做错了什么?
【问题讨论】:
【参考方案1】:一般没有错,但有一个小窍门。
你使用
backButton.rx.tap.subscribe [weak self] in
但是你需要使用
backButton.rx.tap.subscribe [weak self] _ in ...
您注意到第二个版本中的下划线了吗?第二个版本调用方法
public func subscribe(_ on: @escaping (Event<E>) -> Void)
ObservableType。在这种情况下,提供了on
闭包来传递事件,但我们只是使用下划线忽略此闭包的传入参数
【讨论】:
这对我有用!超级想知道为什么不带参数调用它会通过编译?【参考方案2】:setupRx
返回后,订阅似乎已超出范围。如果在视图控制器中添加DisposeBag
并将订阅添加到 dispose 包中,是否可以解决问题?像这样的:
func setupRx()
statusView.backButton.rx.tap
.subscribe [weak self] in
guard let strongSelf = self else return
print("hello")
.addDisposableTo(self.disposeBag)
希望对您有所帮助。
【讨论】:
以上是关于RxSwift - rx.tap 不工作的主要内容,如果未能解决你的问题,请参考以下文章