辛格尔顿在斯威夫特3
属性在苹果的Using Swift with Cocoa and Objective-C document(更新的斯威夫特3)他们给Singleton模式下面的例子:辛格尔顿在斯威夫特3
class Singleton {
static let sharedInstance: Singleton = {
let instance = Singleton()
// setup code
return instance
}()
}
让我们想象一下,这个单需要管理字符串变量数组。我将如何/在哪里声明该属性并确保它已正确初始化为空[String]
阵列?
对我来说这是最好的方法,使init私人。 夫特四分之三语法
// MARK: - Singleton
final class Singleton {
// Can't init is singleton
private init() { }
// MARK: Shared Instance
static let shared = Singleton()
// MARK: Local Variable
var emptyStringArray : [String] = []
}
这应该是正确的答案! – Roman
谢谢你:) @Roman – YannickSteph
我upvoted这个答案,但匹配Swift 3语法,“sharedInstance”应改为只是“共享”。 –
任何初始化都将在init方法中完成。单身人士和非单身人士没有区别。
直接回答问题的附加代码片段会使此答案更有帮助。 –
您可以像这样初始化一个空数组。
class Singleton {
//MARK: Shared Instance
static let sharedInstance : Singleton = {
let instance = Singleton(array: [])
return instance
}()
//MARK: Local Variable
var emptyStringArray : [String]
//MARK: Init
init(array : [String]) {
emptyStringArray = array
}
}
或者,如果你更喜欢不同的方法,这一个将会很好。
class Singleton {
//MARK: Shared Instance
static let sharedInstance : Singleton = {
let instance = Singleton()
return instance
}()
//MARK: Local Variable
var emptyStringArray : [String]? = nil
//MARK: Init
convenience init() {
self.init(array : [])
}
//MARK: Init Array
init(array : [String]) {
emptyStringArray = array
}
}
此方法不适用于扩展吗? '''扩展高速缓存{ 静态让利sharedInstance:缓存= { 让实例=缓存() 回报实例 }() }''' –
有趣的是苹果使用iOS中10'类var'为单身(例如UIApplication)。他们的实施是否与此相同? – jjatie
我更喜欢singleton init方法作为'private'方法,甚至不是'internal'。这可以防止其他人使用该类的默认“()”初始值设定项。 –
class Singleton {
// MARK: - Shared Instance
static let sharedInstance = Singleton()
}
或者用初始化方法:
class Singleton: NSObject {
// MARK: - Shared Instance
static let sharedInstance: Singleton = {
let instance = Singleton()
// setup code
return instance
}()
// MARK: - Initialization Method
override init() {
super.init()
}
}
我不知道为什么你还是没有接受这些答案的任何人。 – 2016-07-25 07:36:57