我在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! }
并处理同步:
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中的一些编辑工作正常,这就是要求的东西.
在Swift中它非常简单,保持共享实例与类本身内部的类引用保持不变,如下所示:
class Helper { static let sharedInstance = Helper() func someMethod() { print("Bla bla") } }
并在不同的类中使用它的方法,如下所示:
Helper.sharedInstance.someMethod()