如何使用ReactiveCocoa观察Swift中的属性发生了变化

时间:2017-12-01 00:04:46

标签: swift swift4 reactive-cocoa reactive-swift

我正在使用新的ReactiveCocoa + ReactiveSwift编写Swift。我正在尝试使用新的ReactiveCocoa框架执行以下操作(在ReactiveCocoa 2.5中):

[[RACObserve(user, username) skip:1] subscribeNext:^(NSString *newUserName) {
    // perform actions...
}];

经过一些研究,我仍然无法弄清楚如何做到这一点。请帮忙!非常感谢你!

1 个答案:

答案 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,那么你将如何做到这一点。请记住,KVO仅适用于NSObject的显式子类,如果该类是用Swift编写的,则该属性需要使用@objc {{1 }}!

dynamic

将打印

  

用户名是可选的(杰克)

     

用户的新名称是Optional(Joe)

     

用户名是Optional(Joe)