在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中实现单例可以非常简练:

1 class Singleton: NSObject {
2     static let sharedSingleton = Singleton()
3 }

 

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

Singleton.sharedSingleton

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

posted @ 2015-07-29 12:35  海之号角  阅读(744)  评论(0编辑  收藏  举报