在swift中获取单例实例

时间:2015-12-28 08:09:36

标签: ios objective-c swift

我已经在objective-c中编写了一个类来为我提供一个名为helper的类的实例,它可以帮助我做很多不同的事情。

static Helper *objHelper = nil;

@implementation Helper

- (id)init {
    self = [super init] ;
    return self;
}

///- Return Helper Singleton Instance
+ (Helper *) getHelperInstance;
{
    @synchronized (objHelper) {
        if ( !objHelper || objHelper == NULL ) {
            objHelper = [[Helper alloc] init];
        }
        return objHelper;
    }
}

我试图迅速写出来,但我不认为我说得对:

var objHelper : Helper?


override init() {
    super.init()

}

func getHelperInstance() ->Helper{

    synchronizd(objHelper == nil) {

        if objHelper == nil {

            objHelper = Helper()
        }
    }
    return objHelper!

}

并处理synchronized:

func synchronizd(lock: AnyObject, closure:()->()) {
    objc_sync_enter(lock)
    closure()
    objc_sync_exit(lock);
}

当我使用objective-c类时,我在我的课程中使用它:

var objHelper = Helper()
objHelper  = Helper.getHelperInstance()

但是当我在swift中写它时我必须传递参数:

var objHelper = Helper()
objHelper  = Helper.getHelperInstance(objHelper)()

我转变为快速错误的是什么?为什么它要求(objHelper)()当它在客观的c代码中它没有要求这样做!我只需要使我的swift代码运行与我的objective-c代码相同。

更新:我要求用另一种方式来做单例而不是结构或者其他什么。我的代码在swift中的一些编辑工作正常,这就是要求的内容。

2 个答案:

答案 0 :(得分:5)

在Swift中它非常简单,保持共享实例与类本身内的类引用保持不变,如下所示:

class Helper {
    static let sharedInstance = Helper()

    func someMethod() {
        print("Bla bla")
    }
}

并在不同的类中使用它的方法,如:

Helper.sharedInstance.someMethod()

答案 1 :(得分:0)

这很简单:

// This will be a global variable accessible from anywhere
let helperSharedInstance = Helper()

class Helper {

}