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

时间:2017-01-28 14:53:49

标签: ios swift uistoryboardsegue

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

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

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

}

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

1 个答案:

答案 0 :(得分:0)

这不是最好的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
        }
    }
}

您发布的代码具有所谓的segue目的地"forced unwrap"(您询问的是 as!)。 Here's一个非常好的答案的问题,解释了强行解缠的危险。向下滚动到答案中的分隔符。

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

假设您在多个场景之间定义了几个segue,每个场景都有自己的视图控制器?作为风格问题,我的代码为“显性”放弃了一点“快捷”:

  • (1)检查segue是否正确
  • (2)如果让... as?,安全检查segue目的地是否正确的视图控制器
  • (3)如果一切都通过检查,则执行代码。在这种情况下,看起来它将整个(!)视图控制器传递给CreateTasksViewController中名为 tasksVC 的变量。

我对第3项实际上持谨慎态度 - 为什么有人会将一个视图控制器作为变量传递给另一个视图控制器?在准备(对于segue:)的大多数情况下,发送VC中的一个或多个 变量将传递到目标。如果我可以向你提供这个...找另一个教程!