使用Swift单例模式

3

我有以下单例类:

class Singleton {
    static let sharedInstance = Singleton()
}

关于如何使用Swift中众多的单例模式实现,网上的资料非常少。我之前在Objective-C的应用程序中使用过它,但对我来说似乎更加直接简单。

例如,如果我想创建一个自定义对象数组,可以在应用程序的任何地方使用,我该如何声明它,以及如何实现它。在我的Objective-C单例类中,我在类文件中创建全局变量,然后像这样实现:

singletonClass *mySingleton = [singletonClass sharedsingletonClass];
mySingleton.whatever = "blaaaah"

非常感谢您的帮助!同时我是新手,对Swift也不熟悉。

2个回答

6

在Swift中,有很多关于单例模式的信息。您是否用谷歌搜到过这篇文章?http://krakendev.io/blog/the-right-way-to-write-a-singleton

但是回答您的问题,您可以简单地定义任何您想要正常使用的内容。

class Singleton {
    static let sharedInstance = Singleton() // this makes singletons easy in Swift
    var stringArray = [String]()

}

let sharedSingleton = Singleton.sharedInstance

sharedSingleton.stringArray.append("blaaaah") // ["blaaaah"]

let anotherReferenceToSharedSingleton = Singleton.sharedInstance

print(anotherReferenceToSharedSingleton.stringArray) // "["blaaaah"]\n"

那实际上就是我从中获取代码的地方,不过这篇文章更多是对每种方法进行分析,而不是解释正在发生的事情。感谢帮助。 - undefined
没问题!在这种情况下,你可能会发现这篇帖子有帮助:https://github.com/hpique/SwiftSingleton - undefined

1

同意Andrew Sowers的观点。只需记住,您还必须声明一个私有初始化器,如下所示:

class Singleton: NSObject {
    static let sharedInstance = Singleton()
    private override init() {}
}

如果没有这个私有的 init(),其他对象可能会创建自己的实例:

let mySingleton = Singleton()

现在有两个实例,Singleton.sharedInstancemySingleton - 不再是单例!我通过一个严重的错误发现了这一点,多个“单例”正在触发计时器并造成混乱。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接