gpt4 book ai didi

ios - 如何使用 Swift 语言将数据从弹出的 Model View Controller 传递到前一个 View Controller ?

转载 作者:行者123 更新时间:2023-12-01 18:51:25 28 4
gpt4 key购买 nike

我知道我们可以使用模型 segue presentViewController 切换到 VC1 到 VC2。
我们可以使用 segue 在 prepareForSegue 方法中将数据从 VC1 传递到 VC2,如下所示:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var vc2: VC2ViewController = segue.destinationViewController as! VC2ViewController
vc2.desiredData = "The data wanted by VC2"
}

但是,当使用dismissViewContoller 时,如何将数据从VC2 重新传递回VC1?
我知道我们可以使用objective-C中的 block ,例如:
// VC1.h file:
typedef void(^SelectedCity)(NSString *);
@property (copy, nonatomic) SelectedCity selectedCity;

// VC1.m file:
__weak VC1ViewController *weakVC1 = self;
_selectedCity = ^(NSString *city) {
weakVC1.cityLabel.text = "city";
}

// VC2.h file:
typedef void(^SelectedCity)(NSString *);
@property (copy, nonatomic) SelectedCity selectedCity;

// VC2.m file:
if (_selectedCity) {
_selectedCity(cell.textLabel.text); //get the city from tableView cell
}

情况是:我从 VC2 的 tableView 单元格中选择了城市,然后我在 VC1 中得到了相同的城市值。

但是,我对这个街区感到困惑。我们如何做到这一点来传递数据?在整个项目中,街区似乎是一种隧道吗?然后我们可以从一侧传递数据,从另一侧获取数据。

之前是我对区 block 的理解。它是否正确?
顺便说一句,如何快速使用 block ?非常感谢。

最佳答案

我知道您可以通过 3 种方式将数据传回之前的 View Controller 。

  • NS通知 - 当你在广播时。当必须在多个类(注册通知的类)中进行调用时使用它。关系 - 一对多。建议您将代表设为弱类型。在你的情况下不推荐。
  • 代表 - 协议(protocol)投诉代表是一对一的交流。它们基于 obj-c/swift 并且最适合任何数量的数据。它们不如 Blocks/Closures 快。关系 - 一对一。建议您制作 block 复制类型。
    here is the example
  • block /关闭 - block 很快。它们是用 C API 编写的包装器。尽管它们的语法是随意的。 block 像变量一样使用。它们包含您想要在稍后阶段执行的一段代码(可能来自另一个类)。 block 创建写入其中的代码语句的副本,包括引用。
    here is the examplehere
  • 关于ios - 如何使用 Swift 语言将数据从弹出的 Model View Controller 传递到前一个 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30724576/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com