2016-09-07 21 views
0

я имею этот код:Refactor переключателя заявление с цикломатической сложностью верхнего чем 10

for notif in EnvironmentManager.notif { 
    if let type = notif.type { 
      switch type { 
      case .SitterAvailable: 
       self.manageNotif(notif, title: "Une sitter disponible", storyboardName: "searchGuard", vcName: "searchGuardNCSID") 
      case .OccasionalAdjustmentReminder: 
       self.manageNotif(notif, title: "Rappel", storyboardName: "searchGuard", vcName: "searchGuardNCSID") 
      case .GuardRequest: 
       self.manageNotif(notif, title: "Nouvelle garde urgente", storyboardName: "EmergencyGuardSitter", vcName: "EmergencyGuardSitterNavigationControllerSID") 
      case .NewReservationRequest: 
       self.manageNotif(notif, title: "Nouvelle garde", storyboardName: "GuardWebSitter", vcName: "WebGuardSitterNavigationControllerSID") 
      case .NewMessage: 
       self.manageNotif(notif, title: "Nouveau message", storyboardName: "MessageListSitter", vcName: "messageSitterViewNavigationControllerSID") 
      case .SoonReservationStartReminder: 
       self.manageNotif(notif, title: "Rappel", storyboardName: "GuardListSitter", vcName: "guardListSitterNavigationControllerSID") 
      case .ReservationAccepted: 
       self.manageNotif(notif, title: "Garde acceptée", storyboardName: "GuardListSitter", vcName: "guardListSitterNavigationControllerSID") 
      case .ReservationRefused: 
       self.manageNotif(notif, title: "Garde refusée", storyboardName: "GuardListSitter", vcName: "guardListSitterNavigationControllerSID") 
      case .NewMessageParent: 
       self.manageNotif(notif, title: "Nouveau Message", storyboardName: "MessageParent", vcName: "messageParentViewNavigationControllerSID") 
      } 
     } 
    } 

я хочу знать, как оптимизировать, что для борьбы цикломатической сложности это, так без массива строки или что-то вроде что

в настоящее время сложность равна 11

спасибо за помощь

+0

SOLID и шаблоны проектирования были бы друзьями. –

ответ

0

массив простой структуры, содержащей название, storyboardName и vcName решат это очень аккуратно.

Если тип заказан из 0..10, вы можете просто использовать индекс в своем массиве. Если тип не работает от 0..10, вы можете включить его в структуру и сначала найти нужный вам индекс.

Определить структуру как этот

struct NotificationTypeData 
{ 
    var notificationType : Int = 0 
    var title    : String = "" 
    var storyboardName  : String = "" 
    var vcName    : String = "" 
} 

и затем создать переменную для хранения его

var notificationTypeData : [NotificationTypeData]? 

Вам нужно будет заполнить его - из файла или жестко закодированы. Вот первые несколько ...

notificationTypeData!.append(NotificationTypeData(notificationType: 0, title: "Une sitter disponible", storyboardName: "searchGuard", vcName: "searchGuardNCSID")) 
notificationTypeData!.append(NotificationTypeData(notificationType: 1, title: "Rappel", storyboardName: "EmergencyGuardSitter", vcName: "EmergencyGuardSitterNavigationControllerSID")) 
notificationTypeData!.append(NotificationTypeData(notificationType: 2, title: "Nouvelle garde urgente", storyboardName: "GuardWebSitter", vcName: "WebGuardSitterNavigationControllerSID")) 
notificationTypeData!.append(NotificationTypeData(notificationType: 3, title: "Nouvelle garde", storyboardName: "MessageListSitter", vcName: "messageSitterViewNavigationControllerSID")) 
notificationTypeData!.append(NotificationTypeData(notificationType: 4, title: "Nouveau message", storyboardName: "GuardListSitter", vcName: "guardListSitterNavigationControllerSID")) 

, а затем упростить код переключателя, который у вас уже есть

for notif in EnvironmentManager.notif 
{ 
    if let type = notif.type 
    { 
     switch type 
     { 
      let data = notificationTypeData!.filter{ $0.notificationType == type }.first 
      if data != nil 
      { 
       self.manageNotif(notif, title: data?.title, storyboardName: data?.storyboardName, vcName: data?.storyboardName 
      } 
     } 
    } 
+0

Да, я думаю об этом, но он не оптимизирован, нет? –

+0

круто, я не реализовал, как вы, но благодаря прошлому времени ^^ –

+0

Всегда есть варианты :-) – Russell