我正在使用带Firebase身份验证的基于Storyboard / Objective-C的iOS应用程序。我使用Cloud 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)似乎做得很好,并且很适合我的情况,但是我遇到了台风!

第一个问题是,使用该框架是否还可以?似乎有些不活跃,但是却是非常惊人的技术。

其次,这是我的实现-我有一个看起来像这样的程序集
- (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
  • 将程序集设为默认

  • 我想知道是否有人可以为此提供一些指导。

    最佳答案

    第一个问题是,使用该框架是否还可以?似乎有些不活跃,但是却是非常惊人的技术。

    答案:
    台风仍然是Objective-C依赖注入库的最佳选择。它功能齐全,因此通常不添加新功能,但是由AppsQuick.ly维护和支持。
    如果您正在使用Swift,那么Fiery Crucible是一个出色的DI框架。它具有Typhoon的大多数功能,易于使用,并且没有其他Swift框架的缺点。

    为了在不同的视图中获得相同的启动类,我需要执行以下操作:

  • 在组件
  • 中使用TyphoonScopeSingleton作为definition.scope
  • 将程序集设为默认

  • 我想知道是否有人可以为此提供一些指导。

    答案:
    这不是正确的方法。这个想法是让一个Typhoon实例在composition root上创建,然后在运行的(前台或后台)应用程序中与您的应用程序一起使用。
  • 我们不要求Typhoon提供依赖性,我们告诉它将依赖性注入到控制器,服务或其他类中。
  • 唯一的例外是使用factory pattern时,其中我们混合了静态依赖项和运行时参数,例如:“为该用户提供订单视图控制器”。在这种情况下,我们将注入装配本身。

  • 对于iOS,Typhoon提供了一种在启动时引导您的程序集的方法,无论有无故事板。 sample显示了如何执行此操作,以及情节提要板上的this guide
    如果您在尝试上述资源后仍然遇到其他障碍,请询问另一个具体问题。

    关于ios - iOS Typhoon DI框架将取代Objective-C中的单例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54950554/

    10-12 00:55