簡體   English   中英

快速獲取單例實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM