Swift 3 - 从segue获取数据

问题描述 投票:0回答:2

我有4个视图,其中包含一个segue(它从json发送数据并将其存储在一个名为email的变量中),我将它传递给它:

A - > B(电子邮件) - > C(电子邮件)

... - > B(电子邮件) - > D(电子邮件)

所以我想做的是将segue的信息发送回:

C-> B.

D-> B.

知道我怎么能实现这个目标?

swift xcode segue
2个回答
2
投票

我想你是在放松一下。

引用文档:

...使用segue对象获取被解除的视图控制器,以便您可以从中检索数据。

请参阅View Controller Programming Guide for iOS上的创建放松瞄准。


2
投票

传回数据的常用方法是使用委托。 Swift中的委派是使用协议完成的。因此,例如,您声明以下协议(请为协议和属性使用有意义的名称,以下只是一个示例):

protocol COrDDelegate {
  func willReturn(someString: String)
}

然后,将相应的委托属性添加到C和D视图控制器:

class C: UIViewController {
  weak var delegate: COrDDelegate?
  ...
}

(D也是如此)。你必须使用weak修饰符来避免保留周期。之后,在解除视图控制器之前调用委托的方法:

func dismissMe() {
  self.delegate?.willReturn(someString: "Meaningful data")
  self.dismiss(animated: true, completion: nil)
}

在B中,您实现协议:

extension B: COrDDelegate {
  func willReturn(someString: String) {
    print(someString)
  }
}

并在prepare(for:sender:) segue准备方法中将委托属性分配给C或D(就像你可能正在为email做的那样):

func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  if let c = segue.destination as? C {
    c.email = self.email
    c.delegate = self
  }
}

希望我能够传达一般的想法。祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.