@@ -25,7 +25,7 @@ public extension PagingMenuControllerDelegate {
2525internal let MinimumSupportedViewCount = 1
2626internal let VisiblePagingViewNumber = 3
2727
28- open class PagingMenuController : UIViewController , PagingValidator {
28+ open class PagingMenuController : UIViewController {
2929 weak public var delegate : PagingMenuControllerDelegate ? {
3030 didSet {
3131 guard let menuView = menuView else { return }
@@ -520,3 +520,54 @@ extension PagingMenuController: ViewCleanable {
520520 }
521521 }
522522}
523+
524+ // MARK: Validator
525+
526+ extension PagingMenuController {
527+ fileprivate func validate( _ options: PagingMenuControllerCustomizable ) {
528+ validateDefaultPage ( options)
529+ validateContentsCount ( options)
530+ validateInfiniteMenuItemNumbers ( options)
531+ }
532+
533+ fileprivate func validateContentsCount( _ options: PagingMenuControllerCustomizable ) {
534+ switch options. componentType {
535+ case . all( let menuOptions, let pagingControllers) :
536+ guard menuOptions. itemsOptions. count == pagingControllers. count else {
537+ raise ( " number of menu items and view controllers doesn't match " )
538+ return
539+ }
540+ default : break
541+ }
542+ }
543+
544+ fileprivate func validateDefaultPage( _ options: PagingMenuControllerCustomizable ) {
545+ let maxCount : Int
546+ switch options. componentType {
547+ case . pagingController( let pagingControllers) : maxCount = pagingControllers. count
548+ case . all( _, let pagingControllers) :
549+ maxCount = pagingControllers. count
550+ case . menuView( let menuOptions) : maxCount = menuOptions. itemsOptions. count
551+ }
552+
553+ guard options. defaultPage >= maxCount || options. defaultPage < 0 else { return }
554+
555+ raise ( " default page is invalid " )
556+ }
557+
558+ fileprivate func validateInfiniteMenuItemNumbers( _ options: PagingMenuControllerCustomizable ) {
559+ guard case . all( let menuOptions, _) = options. componentType,
560+ case . infinite = menuOptions. displayMode else { return }
561+ guard menuOptions. itemsOptions. count < VisiblePagingViewNumber else { return }
562+
563+ raise ( " number of view controllers should be more than three with Infinite display mode " )
564+ }
565+
566+ fileprivate var exceptionName : String {
567+ return " PMCException "
568+ }
569+
570+ fileprivate func raise( _ reason: String ) {
571+ NSException ( name: NSExceptionName ( rawValue: exceptionName) , reason: reason, userInfo: nil ) . raise ( )
572+ }
573+ }
0 commit comments