我已经在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中的一些编辑工作正常,这就是要求的内容。
答案 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 {
}