-1

我有一些应用程序范围的参数,可以从任何地方访问。比如用户名。(如果我为它创建一个单例,该应用程序将是一个单用户应用程序,但我需要更多。)

iOS 为我们提供了一些单例,例如应用程序委托,我开始将参数放在那里。我创建了一个很好的UIViewController扩展,可以透明地访问它:

extension UIViewController {
        var configuration: Configuration {
             get { return (UIApplication.shared.delegate as! AppDelegate).configuration }
        }
}

我还有一个主屏幕,我可以像上面的配置一样移动所有参数,也许将它们包装到一个参数类中,然后UIViewcontroller扩展程序将浏览导航堆栈以找到具有此属性的主屏幕。

单例对于懒惰的程序员来说非常好:它可以从任何地方访问,不需要在对象之间传递任何东西。使用类扩展就像单例,但仍然有一个类负责它。(好吧,如果它是应用程序的委托,它仍然像一个单例,但使用主视图控制器的属性会破坏这种反模式。)

当我使用好老朋友 MVC 时,我认为上述解决方案会起作用。但不幸的是,UIApplicationDelegate只能从主线程访问(导航堆栈也是如此),所以我总是必须从后台线程调度它。

出于这个原因,我已经开始重构上述解决方案,并始终将属性作为参数从类传递到类。现在,我必须放很多代码来实现这一点,包括为 segue 做准备,我只使用故事板连接,没有一行代码。

避免单身人士的最佳方法是什么?

4

1 回答 1

1

我认为你应该看看 Coordinator 模式——有很多很好的教程。然后,您可以让一些协调器仅用于基于用户的屏幕,并正确执行当前用户的一些协议默认实现,以避免必须不断传递当前用户

于 2019-09-23T07:24:18.543 回答