新项目要上Swift了虽然一直在期待,但等到真正用的时候,哎,你懂的。
今天我们要实现一个最基础的设计模式中单例,分为一下几种:
// MARK: -单例1 最简单最便捷的方案,由于历史原因,曾经是非线程安全的,但是现在是了。理论上这是最佳实践
static let shared1Instance = JSBUserInfoManager()
// MARK: -单例2 第一种方案的思想的保险实践,也是兼容Swift历史迭代的产物。
class var shared2Instance:JSBUserInfoManager{
struct Static {
static let instance = JSBUserInfoManager()
}
returnStatic.instance
}
// MARK: -单例3 目前Swift3是移除了dispatch_once_t,进一步验证了不需要自己实
现OC那样的单例。class var shared3Instance:JSBUserInfoManager{
struct Static {
static var onceToken:dispatch_once_t
static var instance:JSBUserInfoManager? =nil
}dispatch_once(&Static.onceToken) {
Static.instance = JSBUserInfoManager()
}
returnStatic.instance!
}
// MARK: -单例4 这个是非线程安全的,如果不需要多线程可以用,但是谁能笃定不需要呢?
private static var shared4:JSBUserInfoManager? =nil
class func shared4Instance() ->JSBUserInfoManager{
if(shared4 ==nil) {
shared4 = JSBUserInfoManager()
}
returnshared4!
}
// MARK: -单例5 这个是Swift3的最佳实践了,仔细看看UIApplication貌似就这么做的。
protocol Singleton:class{
static var shared5Instance:Self{get}
}
final class DemoSingle:Singleton{
static let sharedInstance = DemoSingle()
}