【问题标题】:I do not understand what this code does(the code is about segues)我不明白这段代码的作用(代码是关于 segues 的)
【发布时间】:2017-06-14 03:35:03
【问题描述】:

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

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

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

}

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

【问题讨论】:

  • 不理解as! 的含义表明您还没有完成基本的语言教程,甚至没有通过谷歌搜索来尝试找出自己。为什么您希望了解一种您还没有学过的语言?
  • 我没有当成!在我的课程中
  • 上面的链接可能有用
  • 按字面意思输入“swift as!”进入谷歌会产生大量的答案。不要试图用 SO 作为基本思维的替代品,它行不通,也不会为世界其他地方提供出色的内容,而这正是我们在这里的目的
  • 那我要删除这个帖子还是什么?

标签: ios swift uistoryboardsegue


【解决方案1】:

这不是最好的 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" 的segue 目的地(即您询问的as!)。 Here's 一个很好的答案的问题,解释了强制展开的危险。向下滚动到答案中的分隔符。

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

假设您在多个场景之间定义了多个 segue,每个场景都有自己的视图控制器?我的代码,就风格而言,为“明确性”放弃了一点“敏捷性”:

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

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

【讨论】:

    猜你喜欢
    • 2012-09-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    相关资源
    最近更新 更多