【问题标题】:Custom initialization with segue使用 segue 进行自定义初始化
【发布时间】:2015-07-01 17:23:43
【问题描述】:

我最近开始使用 UIStoryboards,希望有人可以帮助我解决 segue 处理初始化方式的问题。基本上这就是我习惯使用自定义初始化程序来初始化控制器的方式。

let myController = MyController(dependency: myDependency)
navigationController?.pushViewController(myController, animated: true)

但是使用 segue,我必须在 prepareForSegue 中设置属性,并且没有机会以安全的方式设置依赖项。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
     if let identifier = segue.identifier {
          if identifier == "ShowMyController" {
               let myController = segue.destinationViewController as! MyController
               myController.dependency = myDependency
          }
     }
}

我认为 prepareForSegue 处理这个问题的方式很糟糕。我看到了自定义初始化避免的 prepareForSegue 方法的一些可能问题。

  1. 如果我向 MyController 添加依赖项,我将无法从编译器获得帮助,因为我有一个需要处理的新依赖项。

  2. 当将此代码交给其他开发人员时,他们很难推断应该在 MyController 上设置哪些依赖项才能安全使用它。

  3. 在 Swift 中,我必须解包并转换 segue 才能设置依赖项。

任何想法都会有所帮助!谢谢

【问题讨论】:

    标签: ios swift initialization uistoryboard uistoryboardsegue


    【解决方案1】:

    segue 的想法是创建和呈现UIViewController,无需任何代码。对于开发人员而言,通过获取应用程序流程获得的积分远不止于初始化问题(但同时拥有它们可能会很好)。 我认为,如果您将制作一些具有所需功能的 DataSource 协议,那么您将很难错过这些要点。 如果有人有更好的想法,那将是很好的学习...

    【讨论】:

    • 是的,我理解将尽可能多的逻辑推向故事板。 DataSource 协议是个好主意,我会试试看。
    猜你喜欢
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多