如果文本为空,则RxSwift从可观察链退出

时间:2018-11-20 03:06:21

标签: swift rx-swift

如果我没有必要的信息,则无法理解如何从可观察序列中提前退出的方法。这是一个简化的示例...

@IBOutlet weak var myTextField: UITextField!
...
myButton.rx.tap. // stop here if textField is nil or empty
.flatMap { API.fetchMyList() }
.subscribe...

1 个答案:

答案 0 :(得分:1)

您将希望转换可观察的链以包括文本字段的内容,然后过滤掉您不感兴趣的值。运算符withLatestFrom将把另一个可观察的值拉入当前链

@IBOutlet weak var myTextField: UITextField!

myButton.rx.tap
.withLatestFrom(myTextField.rx.text)
.filter { $0 != nil && $0?.isEmpty == false }
.flatMapLatest { // here $0 is the value of the text field
  API.fetchMyList($0) 
}
.subscribe...

作为旁注,您可能希望使用flatMapLatest代替flatMap,以便在再次按下按钮时取消旧请求。