Swift 3 - 从 segue 取回数据

Swift 3 - Get data back from segue

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

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

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

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

C->B

D->B

知道我怎样才能做到这一点吗?

我想你是在unwind segue

引用文档:

...use the segue object to fetch the view controller being dismissed so that you can retrieve data from it.

请参阅 View Controller Programming Guide for iOS

上的 创建 Unwind Segue

传回数据的常用方法是使用委托。 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
  }
}

希望我能够传达总体思路。祝你好运!