RACSubject migration to ReactiveCocoa 5 (Swift 3)



我必须将应用程序从exectivecocoa 4迁移到eactivecocoa 5(由于迅速3迁移(

旧实现使用了一些racSubject实例来触发(performerationsUbject.SendNext(操作和处理(didoperationsubject.subscribeNext(结果

internal class MyClass {
internal var performOperationSubject: RACSubject = RACSubject()
internal var didOperationSubject: RACSubject = RACSubject()
internal overide init() {
  super.init()
  self.performOperationSubject.subscribeNext { [weak self](_) in
    guard let strongSelf = self else { return }
    strongSelf.didOperationSubject.sendNext(result)
}
}

以及使用myClass实例

myClassInstance.didOperationSubject.subscribeNext { ... }
myClassInstance.performOperationSubject.sendNext(value)

不幸的是,Racsubject不再存在于eactivecocoa 5(reactivesWift(

如何在此上下文中替换racsubject?

您将使用pipe,它为您提供输入观察者和输出信号,而不是使用RACSubject进行输入和输出。ReactiveSwift文档中的示例看起来像这样:

let (signal, observer) = Signal<String, NoError>.pipe()
signal
    .map { string in string.uppercased() }
    .observeValues { value in print(value) }
observer.send(value: "a")     // Prints A
observer.send(value: "b")     // Prints B
observer.send(value: "c")     // Prints C

使用signal.pipe而不是racSubject:

由于信号类型(例如RACSUBEXT(总是"热",因此有一种特殊的类方法来创建可控信号。信号方法可以替换主题的使用,并通过将观察到的API与发送API分开来更好地表达意图。

使用管道,根据需要在信号上设置观察者,然后将值发送到水槽:

let (signal, observer) = Signal<String, NoError>.pipe()
signal.observeValue(value in
    // use value
})
observer.send(value: "the value")

相关内容

  • 没有找到相关文章

最新更新