Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在Swift中将参数传递给单例类吗?和一般单例使用_Swift_Singleton - Fatal编程技术网

我可以在Swift中将参数传递给单例类吗?和一般单例使用

我可以在Swift中将参数传递给单例类吗?和一般单例使用,swift,singleton,Swift,Singleton,是否可以将参数传递给Singleton类?如果是,怎么做 这是我的一个单例类的片段: class NotificationManager: NSObject { static let sharedManager = NotificationManager() var tabBarController: UITabBarController! private override init() { super.init() } 对于此单例,在使用前必须始终设置公共属性tabBarCont

是否可以将参数传递给Singleton类?如果是,怎么做

这是我的一个单例类的片段:

class NotificationManager: NSObject {

static let sharedManager = NotificationManager()
var tabBarController: UITabBarController!

private override init() {
    super.init()
}
对于此单例,在使用前必须始终设置公共属性
tabBarController

我想知道是否有可能在启动时传递正确的
UITabBarcontroller
对象,因为我假设这是我的单例类被实例化的时候?这将防止类被错误地实现。我并不认为这是一个问题

另外,在这个实例中使用单例类是否完全合适?管理一组特定的操作?过去我总是传递对象,尤其是
managedObjectContext
,但现在我发现单例类可以让大型应用程序中的一切变得更干净、更好、更安全(因为只有一种立场)。我可以理解在类之间传递对象对于较小的应用程序来说是很好的,但一旦它们变大,就会变得相当混乱

在我最近的应用程序中,我还在iOS和watchOS应用程序之间使用一个共享的单例类,该类定义了一些全局变量,例如服务器端点和环境。这似乎是定义需要此访问权限的变量的最佳方式

我有朋友告诉我单身不好用,从我的谷歌搜索结果来看,这真的是一个混合包。在我的例子中,它们使我的代码更易于管理和处理


谢谢。

你可以随心所欲地建立单身家庭。您只需更改它的初始化/组织方式。本文中有一些例子。对于模式的一些一般性评论,您可以

我个人的观点是,一般来说避免单身是好的,但有时他们是必要的。然而,我倾向于说,只有当应用程序启动时可以初始化时,才应该使用单例(app Delegate),并且可以/应该在整个应用程序的生命周期中使用并保持活动状态


我要警告不要使用与用户界面有关的单例。看起来您正在捕获一个UtiAbbarController。我强烈建议不要这样做,而是使用授权或响应事件。这部分是因为一般的设计怪异,但也会使应用程序的恢复和应用程序的内存占用变得复杂。

很高兴知道这一点。至于
UITabBarController
,在这个类中,我只是更新选项卡的徽章图标。如果我要为此使用
通知
,我需要在调用相关更新函数的每个类中都有一个通知处理程序。这会让一切变得有点混乱。如果我要使用委托,这意味着我需要在使用相关函数的每个类中使用委托协议函数。我认为在这种情况下,代理看起来会更好。想法?我想说这是通知的完美用法:)我建议使用一个静态方法或函数,您可以调用它,这样您只需从应用程序中的任何位置执行NotificationHandler.sendNotificationsUpdateNotification(),并让您的选项卡控制器监听即可。