Swift中的SharedInstance

时间:2016-01-21 13:53:42

标签: ios objective-c swift swift2

有人可以帮我将这段代码转换成Swift吗?

我在Objective-C代码中提到.h.m

AbcUIViewController。我想在我的Swift代码中执行此方法。 S怎么可能?

Abc.h

+ (Abc*)sharedInstance;
- (void) startInView:(UIView *)view;
- (void) stop;

Abc.m

static Abc*sharedInstance;

+ (Abc*)sharedInstance
{
    @synchronized(self)
    {
        if (!sharedInstance)
        {
            sharedInstance = [[Abc alloc] init];
        }

        return sharedInstance;
    }
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

    }
    return self;
}

@end

1 个答案:

答案 0 :(得分:2)

在swift中,最好和最干净的方法就是这个

static let sharedInstance = ABC()

不需要structsclass variable,这仍然是一种有效的方法,但它不像Swift那样。

不确定你是否想要为UIViewControllers使用Singleton,但一般来说Swift中的Singleton类看起来像这样

class ABC {

     static let sharedInstance = ABC()

     var testProperty = 0

     func testFunc() {

     }
}

,而你在其他课程中只会说

let abc = ABC.sharedInstance

abc.testProperty = 5
abc.testFunc()

或直接致电

ABC.sharedInstance.testProperty = 5
ABC.sharedInstance.testFunc()

另外作为附注,如果你使用Singleton类并且你有一个初始化器,你应该将它设为私有

class ABC {

     static let sharedInstance = ABC()

     private init() {

    }
}