7

这是我的课:

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)
}

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

4

1 回答 1

12

大多数情况下,如果您可以控制支持变量,您会更喜欢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),则需要声明myArraydynamic(另一个要求是托管类是子类,NSObject这里UIViewController满足这个要求)。swift 中默认不实现 KVO,使用动态确保访问是使用处理 KVO 事件的 Objective-C 运行时完成的。

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

这方面的文档可以在这里找到

于 2016-03-04T09:22:06.223 回答