gpt4 book ai didi

ios - ReactiveCocoa rac_valuesForKeyPath 在 Swift 中不起作用

转载 作者:搜寻专家 更新时间:2023-10-30 22:09:07 25 4
gpt4 key购买 nike

我正尝试在我用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com