某些 UIView 属性上的 RxSwift `observeWeakly` 失败,而 `observe` 确实有效
RxSwift `observeWeakly` on certain UIView properties fails while `observe` does work
问题很简单:
我有以下扩展来使用 RxSwift 订阅 UIView 的 alpha
和 hidden
属性。但是这个错误 invalidPropertyName
错误。
只需将 observeWeakly
替换为 observe
即可修复错误,但我宁愿不这样做以防止可能的保留周期。
完全相同的代码确实适用于框架和边界等属性,据我所知,至少 hidden
是符合 KVO 的 属性.
这是一个已知问题,还是有任何其他方法可以在针对 iOS 12.0 时观察这些属性?
有问题的代码:
extension Reactive where Base: UIView {
var observeAlpha: Observable<CGFloat?> {
get {
return observeWeakly(CGFloat.self, "alpha")
.do(
onError: {
print([=10=])
}
)
.catchErrorJustReturn(1.0)
.startWith(base.alpha)
}
}
var observeIsHidden: Observable<Bool?> {
get {
return observeWeakly(Bool.self, "hidden")
.do(
onError: {
print([=10=])
}
)
.catchErrorJustReturn(false)
.startWith(base.isHidden)
}
}
}
两个错误:
Object `<UIView: 0x7f9a4654a170; frame = (0 0; 375 812); autoresize = W+H; layer = <CALayer: 0x600002464940>>` doesn't have a property named `alpha`.
Object `<UITransitionView: 0x7f9a4654a170; frame = (0 0; 375 812); autoresize = W+H; layer = <CALayer: 0x600002464940>>` doesn't have a property named `hidden`.
我看起来像 observe
运算符直接存储键路径,而 observeWeakly
试图解析它。对我来说,后一个代码似乎有一个错误。
解决方案是不要像使用模型一样使用您的视图。 alpha
值更改的唯一方法是设置它。与其观察视图的 alpha 或隐藏属性,不如观察导致这些属性发生变化的任何原因。
问题很简单:
我有以下扩展来使用 RxSwift 订阅 UIView 的 alpha
和 hidden
属性。但是这个错误 invalidPropertyName
错误。
只需将 observeWeakly
替换为 observe
即可修复错误,但我宁愿不这样做以防止可能的保留周期。
完全相同的代码确实适用于框架和边界等属性,据我所知,至少 hidden
是符合 KVO 的 属性.
这是一个已知问题,还是有任何其他方法可以在针对 iOS 12.0 时观察这些属性?
有问题的代码:
extension Reactive where Base: UIView {
var observeAlpha: Observable<CGFloat?> {
get {
return observeWeakly(CGFloat.self, "alpha")
.do(
onError: {
print([=10=])
}
)
.catchErrorJustReturn(1.0)
.startWith(base.alpha)
}
}
var observeIsHidden: Observable<Bool?> {
get {
return observeWeakly(Bool.self, "hidden")
.do(
onError: {
print([=10=])
}
)
.catchErrorJustReturn(false)
.startWith(base.isHidden)
}
}
}
两个错误:
Object `<UIView: 0x7f9a4654a170; frame = (0 0; 375 812); autoresize = W+H; layer = <CALayer: 0x600002464940>>` doesn't have a property named `alpha`.
Object `<UITransitionView: 0x7f9a4654a170; frame = (0 0; 375 812); autoresize = W+H; layer = <CALayer: 0x600002464940>>` doesn't have a property named `hidden`.
我看起来像 observe
运算符直接存储键路径,而 observeWeakly
试图解析它。对我来说,后一个代码似乎有一个错误。
解决方案是不要像使用模型一样使用您的视图。 alpha
值更改的唯一方法是设置它。与其观察视图的 alpha 或隐藏属性,不如观察导致这些属性发生变化的任何原因。