学习iOS Swift编程并想了解如何实施用户登录过程?
后端-iOS机制是:
我对iOS实施有疑问。
答案 0 :(得分:3)
实际上,有很多方法。这一切都取决于你,你将如何管理它。我可以指出两个例子,我自己如何管理它。
NSOperation
。在WWDC 2015上有一个很棒的会议,关于高级NSOperations
。 Here it is.
基本上,您创建了NSOperaton
的子类,并使其他操作依赖于它。在您的情况下,您将具有用户登录的操作,并且所有其他操作将取决于用户登录(当然只有那些需要它的人)。如果成功,则执行操作。在用户登录操作中,您将检查,如果用户已经登录,并且您有一个令牌,如果没有,则显示当前的日志记录屏幕。
基于WWDC的谈话,还有一个名为Operations
的真棒库。 Here it is.
PromiseKit
。这是另一个,使用PromiseKit
。它与运营并没有多大区别,但在我看来,更简单一些。您创建Promise
以确保您已登录。制作一系列承诺非常简单,因此您承诺用户登录并从中链接任何其他内容。如果登录成功,则承诺链继续执行。
这一切都基于另一个很棒的库,PromiseKit
。 Here it is
一旦你理解了它,它非常强大且使用起来非常简单。它有很好的文档记录,并有一堆教程here。
还有很多其他的方法,所以你可以选择任何一种方法,然后将它们与你喜欢的方法结合起来。
询问您的第一个问题,您将其设为异步,因此,当您发出网络请求时CoreData
的缓慢程度并不重要。
答案 1 :(得分:0)
1 - 嗯,是的,有点。但我怀疑你会注意到任何延迟或任何事情:CoreData非常快,并且不需要花费任何大量时间来获取一个对象。或者,保存此数据的CoreData对象(我们称之为User
)可以是UIApplicationDelegate
子类的属性(让我们称之为MyAppDelegate
)。您将获取此User
- application:didFinishLaunchingWithOptions:
,并在login / logout / expire / etc上更新它。通过这种方式,您可以从任何地方访问它,并且您无需在需要时随时从CoreData中获取它
此外,您可以使用iOS Keychain代替CoreData。 (这里有tutorial可能对此有帮助。)
2 - 再次,您可以使用MyAppDelegate
。例如,您可以向其添加方法,这将保存当前导航状态,并将UIWindow
的根控制器更改为您的LoginViewController
。或者它会在当前控制器上显示LoginViewController
。成功登录后,您将导航堆栈返回到先前的状态
此外,您可以将此代码移动到某种NavigationController
- 类来处理这种情况。它会有类似的东西
func checkToken(Dictionary response, UIViewController currentController) -> Bool
。如果令牌有效,则只返回true
,如果没有,则返回false
并处理导航至LoginViewController
,并在登录后返回currentController
。此NavigationController
可以是MyAppDelegate
的属性,可以是单身,每次需要时创建,也可以将其传递给您显示的每个UIViewController
。