转载

在Swift中实现单例方法

在写Swift的单例方法之前可以温习一下Objective-C中单例的写法:

1 + (instancetype)sharedSingleton{ 2     static id instance; 3      4     static dispatch_once_t onceToken; 5     dispatch_once(&onceToken, ^{ 6         instance = [[self alloc] init]; 7     }); 8     return instance; 9 }

首先可以考虑仿照OC中的写法写一个。

因此Swift中的一种写法可以如下:

 1 class Singleton: NSObject {  2   3     static var instance: Singleton?  4     static var onceToken: dispatch_once_t = 0  5       6     //仿照OC中的写法  7     class func sharedSingleton() ->Singleton {  8         dispatch_once_(&onceToken) { () -> Void in  9             instance = Singleton() 10      11         } 12         return instance! 13     } 14 }

Swift在OC基础之上做了很多优化提升,因此可以考虑利用Swift的一些新的特性来实现单例。

考虑到Swift中let本身就是线程安全的,因此在Swift中实现单例可以非常简练:

static let sharedSingleton = Singleton()

由于实现方式已经从原来的函数变成了属性,因此在使用时也需要做相应的调整,使用时如下:

Singleton.sharedSingleton

由此可见,在优化吸收多种语言优点之后出现的Swift,在实现单例上相比以往有了很大提高。

正文到此结束
Loading...