如何使用 Rxswift 获取 UIImageView 的 Observable is Empty?
How to get a Observable of UIImageView is Empty by Using Rxswift?
我想通过使用 Rxswift 获得一个 Observable of UIImageView is Empty。
这是我的代码:
let usernameValid = firstTextField.rx.text.orEmpty
.map { [=10=].characters.count >= 1 }
.shareReplay(1)
let passwordValid = secondTextField.rx.text.orEmpty
.map { [=10=].characters.count >= 1 }
.shareReplay(1)
let everythingValid = Observable.combineLatest(usernameValid, passwordValid) { [=10=] && }
.shareReplay(1)
everythingValid.bindTo(submitButton.rx.isEnabled).addDisposableTo(disposeBag)
我想获得类似 usernameValid 的 Observable。
UIImageView
上的 .rx.image
属性 是 UIBindingObserver
类型。此类型不实现 ObservableType
,因此您将无法简单地编写 imageView.rx.image.orDefault(defaultImage)
.
如果您想观察 UIImageView
的 image
属性,您需要使用 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 [=10=] is nil
return [=10=] ?? defaultImage
}
你也可以写 isEmpty
属性 作为 Reactive
的扩展
extension Reactive where Base: UIImageView {
var isEmpty: Observable<Bool> {
return observe(UIImage.self, "image").map{ [=11=] == nil }
}
}
// Usage:
imageView.rx.isEmpty.subscribe(onNext: { isEmpty in
/** do something */
}).disposed(by: disposeBag)
swift 5
lazy var image: Observable<UIImage?> = imageView.rx.observe(UIImage.self, "image")
我想通过使用 Rxswift 获得一个 Observable of UIImageView is Empty。
这是我的代码:
let usernameValid = firstTextField.rx.text.orEmpty
.map { [=10=].characters.count >= 1 }
.shareReplay(1)
let passwordValid = secondTextField.rx.text.orEmpty
.map { [=10=].characters.count >= 1 }
.shareReplay(1)
let everythingValid = Observable.combineLatest(usernameValid, passwordValid) { [=10=] && }
.shareReplay(1)
everythingValid.bindTo(submitButton.rx.isEnabled).addDisposableTo(disposeBag)
我想获得类似 usernameValid 的 Observable。
UIImageView
上的 .rx.image
属性 是 UIBindingObserver
类型。此类型不实现 ObservableType
,因此您将无法简单地编写 imageView.rx.image.orDefault(defaultImage)
.
如果您想观察 UIImageView
的 image
属性,您需要使用 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 [=10=] is nil
return [=10=] ?? defaultImage
}
你也可以写 isEmpty
属性 作为 Reactive
extension Reactive where Base: UIImageView {
var isEmpty: Observable<Bool> {
return observe(UIImage.self, "image").map{ [=11=] == nil }
}
}
// Usage:
imageView.rx.isEmpty.subscribe(onNext: { isEmpty in
/** do something */
}).disposed(by: disposeBag)
swift 5
lazy var image: Observable<UIImage?> = imageView.rx.observe(UIImage.self, "image")