我想通过使用Rxswift获得一个Observable的UIImageView为空。

这是我的代码:

let usernameValid = firstTextField.rx.text.orEmpty
    .map { $0.characters.count >= 1 }
    .shareReplay(1)

let passwordValid = secondTextField.rx.text.orEmpty
    .map { $0.characters.count >= 1 }
    .shareReplay(1)

let everythingValid = Observable.combineLatest(usernameValid, passwordValid) { $0 && $1 }
    .shareReplay(1)

everythingValid.bindTo(submitButton.rx.isEnabled).addDisposableTo(disposeBag)

我想获得类似username.Valid的Observable。

最佳答案

.rx.image上的UIImageView属性的类型为UIBindingObserver。此类型不实现ObservableType,因此您将不能简单地编写imageView.rx.image.orDefault(defaultImage)

如果您想观察imageUIImageView属性,则需要使用KVO。

// this is "equivalent" to `firstTextField.rx.text`
let imageObs: Observable<UIImage?> = imageView.rx.observe(Optional<UIImage>.self, "image")

// default image will act in the same way the empty string is used in the case of `orEmpty`
let defaultImage = UIImage(named: "defaultImage")!
let imageWithDefaultObs: Observable<UIImage> = imageObs.map {
  // return defaultImage when $0 is nil
  return $0 ?? defaultImage
}

您还可以将isEmpty属性编写为Reactive的扩展

extension Reactive where Base: UIImageView {
    var isEmpty: Observable<Bool> {
        return observe(UIImage.self, "image").map{ $0 == nil }
    }
}
// Usage:
imageView.rx.isEmpty.subscribe(onNext: { isEmpty in
    /** do something */
}).disposed(by: disposeBag)

关于ios - 如何通过使用Rxswift获取可观察到的UIImageView为空?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41566093/

10-12 04:39