我正在使用新的ReactiveCocoa + ReactiveSwift编写Swift。我正在尝试使用新的ReactiveCocoa框架执行以下操作(在ReactiveCocoa 2.5中):
[[RACObserve(user, username) skip:1] subscribeNext:^(NSString *newUserName) {
// perform actions...
}];
经过一些研究,我仍然无法弄清楚如何做到这一点。请帮忙!非常感谢你!
答案 0 :(得分:12)
您的代码段通过KVO运行,这仍然可以使用Swift中最新的RAC / RAS,但不推荐的方式了。
推荐的方法是使用Property
来保存值并且可以观察到。
以下是一个例子:
struct User {
let username: MutableProperty<String>
init(name: String) {
username = MutableProperty(name)
}
}
let user = User(name: "Jack")
// Observe the name, will fire once immediately with the current name
user.username.producer.startWithValues { print("User's name is \($0)")}
// Observe only changes to the value, will not fire with the current name
user.username.signal.observeValues { print("User's new name is \($0)")}
user.username.value = "Joe"
将打印
用户名是杰克
用户名是Joe
用户的新名称是Joe
如果由于某种原因你仍然需要使用KVO,那么你将如何做到这一点。请记住,KVO仅适用于NSObject
的显式子类,如果该类是用Swift编写的,则该属性需要使用@objc
和 {{1 }}!
dynamic
将打印
用户名是可选的(杰克)
用户的新名称是Optional(Joe)
用户名是Optional(Joe)