Last active
December 26, 2017 10:41
-
-
Save TerryCK/2f48e04565a760c26eed5edbe1d2f648 to your computer and use it in GitHub Desktop.
strategy runtime error
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protocol Presentable { | |
func presenting(with viewController: UIViewController) | |
} | |
extension Presentable where Self: UIViewController { | |
func presenting(with viewController: UIViewController) { | |
switch self { | |
case let pushableViewContorller as Pushable: | |
pushableViewContorller.present(on: viewController) | |
case let setableViewContorller as Setable: | |
setableViewContorller.present(on: viewController) | |
default: | |
print("exception error: can't viewContorller presented, plz check: Presentable in Lobby MenuViewController.swift") | |
} | |
} | |
} | |
protocol PresentStrategy where Self: UIViewController { | |
func present(on viewController: UIViewController, animated: Bool) | |
} | |
protocol Pushable: Presentable, PresentStrategy { } | |
extension Pushable { | |
func present(on viewController: UIViewController, animated: Bool = true) { | |
viewController.navigationController?.pushViewController(self, animated: animated) | |
} | |
} | |
protocol Setable: Presentable, PresentStrategy { } | |
extension Setable { | |
func present(on viewController: UIViewController, animated: Bool = false) { | |
viewController.navigationController?.setViewControllers([self], animated: animated) | |
} | |
} | |
//MARK: Extensions to conform Pushable | |
extension BankingMenu: Pushable {} | |
extension StatementMenu: Pushable {} | |
extension MyAccountMenu: Pushable {} | |
extension SupportMenu: Pushable {} | |
extension TermsConditionsMenu: Pushable {} | |
extension LanguageSetting: Pushable {} | |
extension MessageMenu: Pushable {} | |
//MARK: Extensions to conform Stable | |
extension WKWebViewController: Setable {} | |
extension SettingMenu: Setable {} | |
//modified: corrected! | |
//MARK: - PresentStrategy | |
protocol Presentable { | |
func present(with presentStrategy: PresentStrategy) | |
} | |
extension LobbyMenuViewController: Presentable { | |
func present(with presentStrategy: PresentStrategy) { | |
guard let viewController = presentStrategy as? UIViewController else { return } | |
switch presentStrategy { | |
case is Pushable: | |
self.navigationController?.pushViewController(viewController, animated: true) | |
case is Setable: | |
self.navigationController?.setViewControllers([viewController], animated: false) | |
default: | |
print("exception error: can't viewContorller presented, plz check: Presentable in Lobby MenuViewController.swift") | |
} | |
} | |
} | |
//MARK: - Protocol PresentStrategy | |
protocol PresentStrategy { } | |
protocol Pushable : PresentStrategy { } | |
protocol Setable : PresentStrategy { } | |
//MARK: - Extensions to conform Pushable | |
extension BankingMenu : Pushable {} | |
extension StatementMenu : Pushable {} | |
extension MyAccountMenu : Pushable {} | |
extension SupportMenu : Pushable {} | |
extension TermsConditionsMenu : Pushable {} | |
extension LanguageSetting : Pushable {} | |
extension MessageMenu : Pushable {} | |
//MARK: - Extensions to conform Stable | |
extension WKWebViewController : Setable {} | |
extension SettingMenu : Setable {} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment