swift - 重构开关语句

标签 swift switch-statement refactoring global-variables

有没有一种方法可以重构这个函数,让我尽可能少地重复自己?

我有四个 ViewController,每个 ViewController 都有一个变量 eventData,它是一个自定义对象。

我考虑过让 eventData 成为一个全局变量。这样做有什么缺点吗?

这是我现在使用的代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    navigationItem.title = nil

    let segues = UIStoryboardSegue.Segue.self

    switch segue.identifier! {

    case segues.EventOverviewToGuestList.rawValue:

        let destinationVC = segue.destinationViewController as! GuestListVC

        destinationVC.eventData = eventData


    case segues.EventOverviewToAnalytics.rawValue:

        let destinationVC = segue.destinationViewController as! AnalyticsVC

        destinationVC.eventData = eventData


    case segues.EventOverviewToMessaging.rawValue:

        let destinationVC = segue.destinationViewController as! MessagingVC

        destinationVC.eventData = eventData


    case segues.EventOverviewToInformation.rawValue:

        let destinationVC = segue.destinationViewController as! InformationVC

        destinationVC.eventData = eventData

    default: break

    }

}

segues 是一个enum:

extension UIStoryboardSegue {

    enum Segue : String
    {

        case EventListToEventOverview
        case EventOverviewToGuestList
        case EventOverviewToAnalytics
        case EventOverviewToMessaging
        case EventOverviewToInformation

    }

}

最佳答案

是的,您可以拥有一个包含此 eventData 成员的基类。让我们说-

class BaseViewController : UIViewController{
    var eventData : SomeCustomClass?
}

并从中派生所有需要事件数据的 View Controller 。

class InformationVC : BaseViewController{
}

class AnalyticsVC : BaseViewController{
}

class GuestListVC:BaseViewController{
}

现在您的案例可以合并:

switch segue.identifier! {

  case segues.EventOverviewToGuestList,
     segues.EventOverviewToAnalytics,
    segues.EventOverviewToMessaging,
     segues.EventOverviewToInformation:

  let destinationVC = segue.destinationViewController as! BaseViewController
  destinationVC.eventData = eventData

  default: break

}

关于swift - 重构开关语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35572688/

相关文章:

c++ - 使用 SDL 的应用程序在任何按键时退出。虽然不应该

java - 如何在 Java 中为多个组合使用复选框的开关?

javascript - 什么时候使用Switch和If else语句?

c++ - 用 C++ 中的函数调用替换强制转换

c++ - 每个编译单元是否只有一个未命名的命名空间?

java - 如何继承/使用多个类的方法

ios - 检查今天是否是某人的生日

ios - 如何使用 Swift 动态访问数组中的项目

ios - swift iOS 大标题文本,颜色不同

swift - UITableViewAutomaticDimension-10.0