ios - ReactiveCocoa rac_valuesForKeyPath 在 Swift 中不起作用

标签 ios swift reactive-cocoa

我正尝试在我用 Swift 编写的 iOS 应用程序中采用 ReactiveCocoa。不幸的是,rac_valuesForKeyPath 似乎没有按预期工作。 这是示例:

class Source: NSObject {
    var observable: String = "<Original>"

    override init() {
        super.init()

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), { () -> Void in
            self.observable = "<Updated>"
            println("Updated value to \(self.observable)");
        })
    }
}

class Observer: NSObject {
    init(source: Source) {
        super.init()

        source.rac_valuesForKeyPath("observable", observer: self).subscribeNext { (value: AnyObject!) -> Void in
            println(">>> Observable value changed: \(value)")
        }
    }
}

该示例产生以下输出:

>>> Observable value changed: <Original>
Updated value to <Updated>

这意味着没有调用 subcribeNext block 。

预期的输入是:

>>> Observable value changed: <Original>
Updated value to <Updated>
>>> Observable value changed: <Updated>

知道如何解决这个问题吗?

最佳答案

可观察对象需要是动态的

我得到了你的示例,可以使用以下代码

class Source: NSObject {
  dynamic var string:String = "Initial Value"

  override init() {
    super.init()
  }
}

class Observer: NSObject {

  init(source:Source) {
    super.init()
    source.rac_valuesForKeyPath("string", observer: self).subscribeNext { (newVal:AnyObject!) -> Void in
      println(newVal)
    }
  }
}

class ViewController: UIViewController {
  var source:Source!
  var obs:Observer!

  override func viewDidLoad() {
    super.viewDidLoad()
    source = Source()
    obs = Observer(source: source)
    source.string = "Another Value"
  }
}

关于ios - ReactiveCocoa rac_valuesForKeyPath 在 Swift 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26140808/

相关文章:

ios - 来电不显示姓名

IOS:AVAudioSession 不工作

php - 将数组响应从 PHP 传递到 iOS 应用程序(使用 Swift)

ios - 如何在 Swift 中使用 iOS SDK 8.3 静音 "UIRemoteNotificationType was deprecated"

ios - ReactiveCocoa : Subscribe only to new values

ios - 使用 ReactiveCocoa.framework 存档上传失败

iOS 在 iPad 详细 Split View中更改 iAD 横幅大小

ios - 在两个不同的类中实现 UITableViewDataSource 协议(protocol)

ios - 如何通过presentViewController 将对象传递到 View 中?

ios - ReactiveSwift 刷新数据