swift - 如果文本为空,RxSwift 退出可观察链

标签 swift rx-swift

如果我没有必要的信息,我很难理解提前退出可观察序列的方法。这是一个简化的例子……

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

最佳答案

您需要转换您的可观察链以包含文本字段的内容,然后过滤掉您不感兴趣的值。运算符 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,这样如果再次点击按钮,旧的请求就会被取消。

关于swift - 如果文本为空,RxSwift 退出可观察链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53385630/

相关文章:

ios - backBarbuttonitem 什么都不做?

swift - 如果在 Swift 中是整数,则将 Double 显示为 Int

ios - 访问swift数组时swift_isUniquelyReferenced_nonNull_native中的EXC_BAD_ACCESS

ios - RxSwift Textfield debounce subscribe 没有调用

swift - 为什么当观测值变为 nil 时 Observer 不发出事件?

ios - RX block 的 Realm 通知

swift - Xcode 9 中的 Playground 是否使用 Swift 4.0 编译

ios - 安装失败: Invalid Argument - System Error

ios - UITableViewCell 删除按钮动画

swift - 使用 RxSwift 链接操作