Swift 使用联合收割机在控制器之间传递数据不工作
我开始使用swift进行联合收割机,但有一些困难(以前在swiftui工作过)。 因此,问题是如何执行某些操作:Swift 使用联合收割机在控制器之间传递数据不工作,swift,combine,Swift,Combine,我开始使用swift进行联合收割机,但有一些困难(以前在swiftui工作过)。 因此,问题是如何执行某些操作: 假设我有vc1。我从那里转到vc2 然后我开始异步操作系统网络关闭,然后返回vc1(通过弹出vc2) 现在,假设我想在返回vc1时,将一个字符串从vc2的asycnrhoss clousre迁移到vc1。 我怎样才能做到这一点 我想使用lets say的发布者 如何在vc1中订阅并从vc2发布或发送 我正在使用这种方法,但它不起作用,它从不在sink下进行编码…… public cl
public class Parent {
public static let shared = Parent()
public var publisher = PassthroughSibject<String,Never>()
}
class vc1: ViewController {
func viewdidLoad() {
let subscription = Parent.shared.oublisehr.sink { (result) in
print(result)
}
}
func navigatetoVC1() {
///// some code to navigate to vc1
}
func button() {
self.navigatetoVC1
}
}
class vc2: ViewController {
func viewDidload() {
///
}
func performsomeOperation() {
someasyncoperation(completion: { result in
switch result {
case .success:
//send some data to vc1
Parent.shared.publisher.send("testdata")
case .failure:
//send some data to vc1
})
self.dismisVC2() //some method to pop out vc2
}
公共类父类{
公共静态let shared=Parent()
public var publisher=passthroughsObject()
}
vc1类:视图控制器{
func viewdidLoad(){
将subscription=Parent.shared.oublisehr.sink{(结果)放入
打印(结果)
}
}
func navigatetoVC1(){
/////一些导航到vc1的代码
}
func按钮(){
自我导航vc1
}
}
vc2类:视图控制器{
func viewDidload(){
///
}
func performsomeOperation(){
someasyncoperation(完成:{结果为
切换结果{
成功案例:
//向vc1发送一些数据
Parent.shared.publisher.send(“testdata”)
案例.失败:
//向vc1发送一些数据
})
self.dismisVC2()//一些弹出vc2的方法
}
}您的代码几乎正确,只是您在viewdidload内部使用了anyCancelable,因此其作用域已用尽。因此,请在视图控制器外部将其用作可选的anyCancelable类型。 下面的代码应该可以工作
class vc1: ViewController {
var subscription = AnyCancellable?
func viewdidLoad() {
self.subscription = Parent.shared.oublisehr.sink { (result) in
print(result)
}
}
func navigatetoVC1() {
///// some code to navigate to vc1
}
func button() {
self.navigatetoVC1
}
}
您能分享一些示例代码或文章吗?我还有一个问题,使用singleton视图模型是否是一种良好的实践?