有没有一种方法可以重构这个函数,让我尽可能少地重复自己?
我有四个 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/