HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – ReactiveCocoa rac_valuesForKeyPath在Swift中不起作用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在我用 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块.

预期的输入是:

>>> 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中不起作用全部内容,希望文章能够帮你解决ios – ReactiveCocoa rac_valuesForKeyPath在Swift中不起作用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。