Swift与OC单例

首先是Objective-C的单例:

@interface MyObject: NSObject
@end

@implementation MyObject

+ (instancetype)sharedInstance {
    static MyObject *sharedInstance = nil;
    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
       sharedInstance = [[MyObject alloc] init];
    });
    return sharedInstance; 
}

@end

 

当然,可以按照OC的格式来写swift的单例,但是这并没有什么意义。

使用struct来写的Swift单例:

class MyObject {
    class var sharedInstance: MyObject {
        struct Static {
            static var onceToken:dispatch_once_t = 0
            static var instance:MyObject? = nil
        }
        
        dispatch_once(&Static.onceToken, { () -> Void in
            Static.instance = MyObject()
        })

        return Static.instance!
    }

}

 

Swift的单例:

//全局单例
private let sharedInstance = MyObject()
class MyObject {
    //单行单例
    static let sharedInstance = MyObject()
}

很简单吧。 -_-

 

posted @ 2016-01-22 10:33  我叫南部21号  阅读(137)  评论(0)    收藏  举报