Swift3 RACSubject迁移到ReactiveCocoa 5(Swift 3)
我必须将应用程序从ReactiveCocoa 4迁移到ReactiveCocoa 5(由于Swift 3迁移) 旧的实现使用一些RACSubject实例来触发(performOperationSubject.sendNext)操作和处理(didOperationSubject.subscribeNext)结果Swift3 RACSubject迁移到ReactiveCocoa 5(Swift 3),swift3,reactive-cocoa,reactive-cocoa-4,reactive-swift,reactive-cocoa-5,Swift3,Reactive Cocoa,Reactive Cocoa 4,Reactive Swift,Reactive Cocoa 5,我必须将应用程序从ReactiveCocoa 4迁移到ReactiveCocoa 5(由于Swift 3迁移) 旧的实现使用一些RACSubject实例来触发(performOperationSubject.sendNext)操作和处理(didOperationSubject.subscribeNext)结果 internal class MyClass { internal var performOperationSubject: RACSubject = RACSubject() inte
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不再出现在reactivecococoa 5(ReactiveSwift)中
在这种情况下,我如何替换RACSubject?您将使用
管道
,它为您提供一个输入观察者和一个输出信号,而不是对输入和输出都使用RACSubject
。看起来像这样:
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
let(信号,观察者)=信号管道()
信号
.map{string.uppercased()中的字符串]
.observeValues{打印值(值)}
send(值:“a”)//打印一个
send(值:“b”)//打印b
send(值:“c”)//打印c
使用Signal.pipe而不是RACSubject:
由于信号类型(如RACSubject)总是“热”,因此有一种特殊的类方法用于创建可控信号。Signal.pipe方法可以取代主题的使用,并通过将观察API与发送API分离来更好地表达意图
要使用管道,请根据需要在信号上设置观察者,然后将值发送到接收器:
let (signal, observer) = Signal<String, NoError>.pipe()
signal.observeValue(value in
// use value
})
observer.send(value: "the value")
let(信号,观察者)=信号管道()
信号。观测值(单位为的值)
//使用价值
})
发送(值:“值”)
您可以使用管道
,它为您提供一个输入观察者和一个输出信号,而不是对输入和输出都使用RACSubject
。看起来像这样:
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
let(信号,观察者)=信号管道()
信号
.map{string.uppercased()中的字符串]
.observeValues{打印值(值)}
send(值:“a”)//打印一个
send(值:“b”)//打印b
send(值:“c”)//打印c
使用Signal.pipe而不是RACSubject:
由于信号类型(如RACSubject)总是“热”,因此有一种特殊的类方法用于创建可控信号。Signal.pipe方法可以取代主题的使用,并通过将观察API与发送API分离来更好地表达意图
要使用管道,请根据需要在信号上设置观察者,然后将值发送到接收器:
let (signal, observer) = Signal<String, NoError>.pipe()
signal.observeValue(value in
// use value
})
observer.send(value: "the value")
let(信号,观察者)=信号管道()
信号。观测值(单位为的值)
//使用价值
})
发送(值:“值”)
我在ReactiveCocoa更改日志中找到了关于此问题的更具体参考。我在ReactiveCocoa更改日志中找到了关于此问题的更具体参考