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.
上的 创建 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
}
}
希望我能够传达总体思路。祝你好运!
我有 4 个视图,其中包含一个 segue(它从 json 发送数据并将其存储在一个名为 email 的变量中),我像这样传递它:
A -> B(电子邮件)-> C(电子邮件)
... -> B(电子邮件)-> D(电子邮件)
所以我想做的是将 segue 的信息发送回:
C->B
D->B
知道我怎样才能做到这一点吗?
我想你是在unwind segue。
引用文档:
上的 创建 Unwind Segue...use the segue object to fetch the view controller being dismissed so that you can retrieve data from it.
传回数据的常用方法是使用委托。 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
}
}
希望我能够传达总体思路。祝你好运!