单例在Swift 3中具有属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例在Swift 3中具有属性相关的知识,希望对你有一定的参考价值。
在Apple的Using Swift with Cocoa and Objective-C document(针对Swift 3更新)中,他们给出了以下Singleton模式的示例:
class Singleton {
static let sharedInstance: Singleton = {
let instance = Singleton()
// setup code
return instance
}()
}
让我们假设这个单例需要管理一个可变的字符串数组。如何/在哪里声明该属性并确保它被正确初始化为空的[String]
数组?
答案
对我来说这是最好的方法,让init私有化。 Swift 3 4 5语法
// 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]()
}
另一答案
你可以像这样初始化一个空数组。
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
}
}
另一答案
class Singleton {
// MARK: - Shared
static let shared = Singleton()
}
用初始化方法:
class Singleton {
// MARK: - Shared
static let shared = Singleton()
// MARK: - Initializer
private init() {
}
}
另一答案
任何初始化都将在init方法中完成。单身人士与非单身人士之间没有区别。
以上是关于单例在Swift 3中具有属性的主要内容,如果未能解决你的问题,请参考以下文章