[英]Get singleton instance in 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!
}
並處理同步:
func synchronizd(lock: AnyObject, closure:()->()) {
objc_sync_enter(lock)
closure()
objc_sync_exit(lock);
}
當我使用Objective-C類時,我在類中將其用作:
var objHelper = Helper()
objHelper = Helper.getHelperInstance()
但是當我迅速編寫它時,我必須傳遞參數:
var objHelper = Helper()
objHelper = Helper.getHelperInstance(objHelper)()
我把什么變成了錯誤的錯誤? 以及為什么它要求(objHelper)()
在目標C代碼中什么時候沒有要求這么做! 我只需要使我的Swift代碼與我的Objective-C代碼運行相同即可。
更新:我要求以其他方式而不是struct或其他方式進行單例。我的代碼可以快速進行一些編輯,這就是要求的內容。
在Swift中,這非常簡單,請在類本身內部與類引用保持共享實例常量,如下所示:
class Helper {
static let sharedInstance = Helper()
func someMethod() {
print("Bla bla")
}
}
並在不同的類中使用其方法,如下所示:
Helper.sharedInstance.someMethod()
就這么簡單:
// This will be a global variable accessible from anywhere
let helperSharedInstance = Helper()
class Helper {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.