gpt4 book ai didi

ios - 快速获取单例实例

转载 作者:行者123 更新时间:2023-11-28 09:57:39 25 4
gpt4 key购买 nike

我用 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;
}
}

我试着用 swift 写它,但我认为我做的不对:

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)()

我转换成 swift 错了什么?以及为什么它要求 (objHelper)() 当它在 objective-c 代码中时它没有要求这样做!我只需要让我的 swift 代码像我的 objective-c 代码一样运行。

更新:我要求以另一种方式而不是结构或其他方式来处理单例。我的代码在 swift 中进行一些编辑后工作正常,这就是要求的内容。

最佳答案

在 Swift 中它非常简单,在类本身内部保持一个共享实例常量和类引用,如下所示:

class Helper {
static let sharedInstance = Helper()

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

然后像这样在不同的类中使用它的方法:

Helper.sharedInstance.someMethod()

关于ios - 快速获取单例实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34489855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com