我会建议一个委托模式,因为回调更为一次性,而委托更好地服务于持续帮助对象的生命周期的目的。无论如何,我已经创建了一个例子来应对你的要求,git它here(框架+测试应用程序包括)
它涉及一个LoginController,这是框架的主要入口点和管弦乐队。
当你初始化它时,你会传递一个回调函数来发送事件,包括“忘记密码”和“用户想退出”,这些都是在枚举中定义的。
public enum LoginFrameworkStatus {
case Login
case ForgotPassword
case Help
case Disaster
case Exited
case UserWantsExit
}
类提供了一个入口点启动进程:
public func enterLoginWorkflow(on controller: UIViewController, callback: LoginFrameworkCallback) {
let myBundle = Bundle(for: LoginController.self)
if let navi = UIStoryboard(name: "LoginWorkflow", bundle: myBundle).instantiateInitialViewController() as? MySpecialNavigationController {
presentingController = controller
navi.loginController = self
self.callback = callback
controller.present(navi, animated: true, completion: {
//presented!
callback?(.Login, navi, self) //If reference to LoginController is lost, tell the callback there's a problem.. shouldn't happend because we have a strong reference on the navigation controller.
})
}
}
..和退出点:
public func leaveLoginWorkflow() {
presentingController?.dismiss(animated: true, completion: {
self.callback?(.Exited, nil,self)
})
}
因此,对于你的框架的主界面将是:
LoginController().enterLoginWorkflow(on: self) { (status, controller, loginController) in
print("\(status) in \(controller?.description ?? "No Controller")")
switch status {
case .UserWantsExit:
loginController?.leaveLoginWorkflow()
case .ForgotPassword:
loginController?.leaveLoginWorkflow()
default:
()
}
}
在测试应用程序中我包含最低工作流程供您测试。
让我知道这是你需要什么,或者如果你想调查委托模式,我认为这会更适合这个。
有人可以帮忙吗? – Swamy
你试过[这](https://mobilefirstplatform.ibmcloud.com/tutorials/en/foundation/6.3/authentication-security/custom-authenticator-login-module/custom-authenticator-login-module-native-ios-应用程序/)已经? –