在Apple的使用Swift with Cocoa和Objective-C文档(针对Swift 3更新)中,他们给出了以下Singleton模式的示例:
class Singleton {
static let sharedInstance: Singleton = {
let instance = Singleton()
// setup code
return instance
}()
}
Run Code Online (Sandbox Code Playgroud)
让我们假设这个单例需要管理一个可变的字符串数组.如何/在哪里声明该属性并确保它被正确初始化为空[String]数组?
Yan*_*eph 235
对我来说这是最好的方法,让init私有化.Swift 3/4语法
// 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]()
}
Run Code Online (Sandbox Code Playgroud)
小智 59
你可以像这样初始化一个空数组.
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
}
}
Run Code Online (Sandbox Code Playgroud)
或者如果你喜欢不同的方法,这个方法会很好.
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
}
}
Run Code Online (Sandbox Code Playgroud)
Meh*_*tra 31
根据Apple的文档:在Swift中,您可以简单地使用静态类型属性,即使在同时跨多个线程访问时,也可以保证只延迟初始化一次.
class Singleton {
// MARK: - Shared
static let shared = Singleton()
}
Run Code Online (Sandbox Code Playgroud)
用初始化方法:
class Singleton {
// MARK: - Shared
static let shared = Singleton()
// MARK: - Initializer
private init() {
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81155 次 |
| 最近记录: |