【发布时间】:2019-03-02 07:46:19
【问题描述】:
我正在开发一个基于 Storyboard/objective-c 的 iOS 应用程序,并带有 firebase 身份验证。我使用云 Firestore 来保存用户数据 - 年龄、性别等。当用户访问应用程序时,我会检查用户是否已登录以下(类似)代码
FIRUser *firUser = [FIRAuth auth].currentUser;
if (firUser) {
// user logged in
// fetch updated user date from cloud firestore
} else {
// NO logged in user
}
当用户登录后,他们可以导航到应用程序的其他部分,否则他们会看到注册/登录页面。
它的外观导航到不同的视图通常意味着我必须调用上面的代码来再次确定登录状态——我不想这样做。我想使用登录用户和来自 firestore 的数据创建一个用户对象,并在视图控制器之间传递它。
Singleton 似乎做得很好,并且非常适合我的情况,但我遇到了 Typhoon!
第一个问题是,仍然可以使用该框架吗?虽然看起来有点不活跃,但非常惊人的技术。
其次是我的实现——我有一个看起来像这样的程序集
- (AuthenticatedUser*)authenticatedUser {
return [TyphoonDefinition withParent:[self user] class:[AuthenticatedUser class] configuration:^(TyphoonDefinition* definition){
definition.scope = TyphoonScopeSingleton;
}];
}
这就是我获取 AuthenticatedUser 实例的方式
ModelsAssembly *modelsAssembly = [ModelsAssembly defaultAssembly];
// no default ModelsAssembly set
if( modelsAssembly == nil ){
modelsAssembly = [[ModelsAssembly new] activated];
[modelsAssembly makeDefault];
}
authenticatedUser = [modelsAssembly authenticatedUser];
要在不同的视图中获得相同的启动类,我似乎需要执行以下操作:
- 在程序集中使用 TyphoonScopeSingleton 作为 definition.scope
- 将程序集设为默认
我想知道是否有人可以为此提供一些指导。
【问题讨论】:
标签: ios objective-c dependency-injection typhoon