我有一些应用程序范围的参数,可以从任何地方访问。比如用户名。(如果我为它创建一个单例,该应用程序将是一个单用户应用程序,但我需要更多。)
iOS 为我们提供了一些单例,例如应用程序委托,我开始将参数放在那里。我创建了一个很好的UIViewController扩展,可以透明地访问它:
extension UIViewController {
var configuration: Configuration {
get { return (UIApplication.shared.delegate as! AppDelegate).configuration }
}
}
我还有一个主屏幕,我可以像上面的配置一样移动所有参数,也许将它们包装到一个参数类中,然后UIViewcontroller扩展程序将浏览导航堆栈以找到具有此属性的主屏幕。
单例对于懒惰的程序员来说非常好:它可以从任何地方访问,不需要在对象之间传递任何东西。使用类扩展就像单例,但仍然有一个类负责它。(好吧,如果它是应用程序的委托,它仍然像一个单例,但使用主视图控制器的属性会破坏这种反模式。)
当我使用好老朋友 MVC 时,我认为上述解决方案会起作用。但不幸的是,UIApplicationDelegate只能从主线程访问(导航堆栈也是如此),所以我总是必须从后台线程调度它。
出于这个原因,我已经开始重构上述解决方案,并始终将属性作为参数从类传递到类。现在,我必须放很多代码来实现这一点,包括为 segue 做准备,我只使用故事板连接,没有一行代码。
避免单身人士的最佳方法是什么?