Swift 中的共享实例

iAp*_*pps -6 objective-c ios swift swift2

有人能帮我把这段代码转换成 Swift 吗?

这里我提到了.h.m在Objective-C 代码中。

Abc是一个UIViewController。我想在我的 Swift 代码中执行这个方法。S怎么可能?

Abc.h

+ (Abc*)sharedInstance;
- (void) startInView:(UIView *)view;
- (void) stop;
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

cra*_*777 5

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

static let sharedInstance = ABC()
Run Code Online (Sandbox Code Playgroud)

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

不确定您是否想要使用单例,UIViewControllers但通常 Swift 中的单例类看起来像这样

class ABC {

     static let sharedInstance = ABC()

     var testProperty = 0

     func testFunc() {

     }
}
Run Code Online (Sandbox Code Playgroud)

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

let abc = ABC.sharedInstance

abc.testProperty = 5
abc.testFunc()
Run Code Online (Sandbox Code Playgroud)

或者直接调用

ABC.sharedInstance.testProperty = 5
ABC.sharedInstance.testFunc()
Run Code Online (Sandbox Code Playgroud)

另外作为旁注,如果您使用 Singleton 类并且您有一个初始化程序,您应该将其设为私有

class ABC {

     static let sharedInstance = ABC()

     private init() {

    }
}
Run Code Online (Sandbox Code Playgroud)