簡體   English   中英

如何使用 Rxswift 獲取 UIImageView 的 Observable 為空?

[英]How to get a Observable of UIImageView is Empty by Using Rxswift?

我想通過使用 Rxswift 獲得 UIImageView 的 Observable 為空。

這是我的代碼:

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)

我想獲得類似 usernameValid 的 Observable。

UIImageView上的.rx.image屬性是UIBindingObserver類型。 此類型不實現ObservableType ,因此您將無法簡單地編寫imageView.rx.image.orDefault(defaultImage)

如果您想觀察UIImageViewimage屬性,則需要使用 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)

迅捷 5

lazy var image: Observable<UIImage?> = imageView.rx.observe(UIImage.self, "image")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM