【问题标题】:How to observe array property changes in RxSwift如何在 RxSwift 中观察数组属性的变化
【发布时间】:2016-06-16 10:47:48
【问题描述】:

这是我的课:

class ViewController: UIViewController {
   var myArray : NSArray!
} 

我想在 myArray 每次指向一个新数组时触发一个事件,如下所示:

self.myArray = ["a"]

self.myArray = ["b"]

我尝试了 rx_observe 但失败了,这是我的代码:

self.rx_observe(NSArray.self, "myArray").subscribeNext { (array) -> Void in
   print(array)
}

只是第一次触发,有什么问题?

【问题讨论】:

    标签: swift key-value-observing rx-swift


    【解决方案1】:

    大多数时候,如果您可以控制支持变量,您会更喜欢Variable 而不是使用rx_observe

    class ViewController: UIViewController {
       var myArray : Variable<NSArray>!
    }
    

    第一次使用 myArray 时,你会这样分配它

    myArray = Variable(["a"])
    

    那么,如果你想改变它的值

    myArray.value = ["b"]
    

    你可以很容易地观察它的变化,使用

    myArray.asObservable().subscribeNext { value in
      // ...
    }
    

    如果您真的想使用rx_observe(可能是因为该变量在程序中的其他地方使用并且您不想更改视图控制器的API),则需要将myArray 声明为@987654331 @(另一个要求是宿主类是NSObject的子类,这里UIViewController满足这个要求)。 swift 中默认不实现 KVO,使用动态可确保使用处理 KVO 事件的 Objective-C 运行时完成访问。

    class ViewController: UIViewController {
      dynamic var myArray: NSArray!
    }
    

    可以在here找到相关文档

    【讨论】:

    • 使用变量会从 RXSwift 库中得到这条消息:“[已弃用]Variable 计划在未来弃用。请考虑将BehaviorRelay 作为替代品。阅读更多信息:git.io/vNqvx”任何想法还有什么可以用来观察数组的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多