2017-08-09 31 views
0

我有視圖控制器。它裏面我有看法RxSwift - rx.tap不工作

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

但是,當我輕按按鈕,沒有任何獲得打印到控制檯。

我在做什麼錯?

回答

0

一般沒有錯,但有一個小的隱藏技巧。

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

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

你是否注意到在第二個版本強調?第二個版本調用方法

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

ObservableType。在這種情況下,on提供了關閉來傳遞事件,但我們只是忽略此關閉使用下劃線的傳入參數

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

希望有所幫助。