我不明白这段代码的作用(代码是关于 segues 的)

I do not understand what this code does(the code is about segues)

我正在观看 iOS 课程视频,课程中的人输入了以下代码:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let nextVC = segue.destination as! CreateTasksViewController
    nextVC.tasksVC = self

}

CreateTasksViewController 是我们应该转到的项目中的视图。另外 "tasksVC" 是应用程序中我们应该是的当前视图控制器 on.I 不明白这段代码的意思,如果有人能准确解释代码的功能,那将会很有帮助.另外什么是 "as!"?如果您需要有关我的问题的更多详细信息,请随时在评论中提问。

那不是最好的 segue 代码。以下是我的编码方式(作为记录,有几种编码方式):

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "[segue name here]" {
        if let nextVC = segue.destination as? CreateTasksViewController {
            nextVC.tasksVC = self
        }
    }
}

您发布的代码有一个所谓的 "forced unwrap" of the segue destination (that's the as! you asked about). 问题和一个很好的答案,解释了强制解包的危险。向下滚动到答案中的分隔线。

虽然我确定代码可以编译(并可能运行),但问题是代码维护。

假设您在几个场景之间定义了多个转场,每个场景都有自己的视图控制器?我的代码,就风格而言,为 "explicitness":

放弃了一点 "Swiftiness"
  • (1) 检查 segue 是否正确
  • (2) if let... as? 用于安全检查 segue 目标是否为正确的视图控制器
  • (3) 如果一切都通过检查,那么代码就会被执行。在这种情况下,它看起来像是将整个(!)视图控制器传递给 CreateTasksViewController 中名为 tasksVC 的变量。

我实际上对第 3 项持谨慎态度 - 为什么会有人将一个视图控制器作为变量传递给另一个视图控制器?大多数情况下 prepare(for segue:) 一个或多个变量 inside 发送 VC 被传递到目的地。如果我可以将此提供给您...找到另一个教程!