我正在swift 4 / XCode 9中学习Google Signin Firebase身份验证。
在Firebase文档中,他们将AppDelegate.swift
声明为GIDSignInDelegate
。我通常希望视图控制器为delegate
来管理SignIn,LogOut等操作......
有人可以解释在应用delegate
与ViewController
(如果有的话)中执行此操作的区别。使用一个而不是另一个是否有利有弊?
我个人觉得在ViewController
中更容易做到这一点或外包到一个类,因为执行segue和其他操作更容易,但可能不是最好的解决方案?
答案 0 :(得分:2)
Firebase文档没有错误提示AppDelegate
,因为它是第一个活跃并由应用共享的对象。但是,GIDSignInDelegate
不必是AppDelegate
也不是视图控制器。这一切都取决于您的项目架构(结构)。如果您的应用程序很大,并且您正在将您的逻辑分成几个模块"您可以创建一个共享(单例)对象,例如SessionService
或LoginService
等,可以在应用启动时实例化并充当您的GIDSignInDelegate
。
答案 1 :(得分:-1)
AppDelegate是一个单例实例,而viewControllers则不是。因此,将AppDelegate作为委托添加到GIDSignInDelegate,可以灵活地从任何视图控制器触发Firebase身份验证方法,而无需担心在viewDidLoad中将视图控制器设置为委托。因为通常登录状态是应用程序的全局,而不仅仅是特定的ViewController,将singleton作为委托添加到GIDSignInDelegate是有意义的,但是app delegate不需要是转储所有代码的地方,而是你可以创建自己的单独的单例类 - Sandeep Bhandari大约23小时之前 给予好评 旗 并享受单身人士的所有好处,同时保持您的应用程序代表清洁。可能存在登录/注册出现在应用程序中的不同ViewControllers上的情况,而不是每次在ViewDidLoad中将每个这样的VC添加为委托时,有一个常见实例处理身份验证过程是有意义的。因为这个实例需要可供应用程序中的所有类使用,所以单例实例是有意义的,但使用app delegate则不然。 AppDelegate不是您应用中所有常用代码的转储码 - Sandeep Bhandari 23小时前