我知道“一线单身”方法
final class Singleton {
static let sharedInstance = Singleton()
private init() {}
}
但是如果你要研究像UIApplication
这样的标准单例对象,你会看到:
我很好奇Apple用来创建单例的代码。
答案 0 :(得分:2)
但是,如果你想知道为什么来自Cocoa Touch的单身人士看起来像他们一样,答案很简单。它们不是用Swift编写的,它们是用Objective-C编写的,而在Objective-C中,单例通常用类方法编写。通常是这样的。
+ (UIApplication * _Nonnull)sharedApplication
{
// This is a typical example of how one might to this in Objective-C
// but we have no way of knowing what code Apple actually has here.
// All we know is that there is a sharedApplication class method.
static UIApplication *sharedApplication = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedApplication = [[UIApplication alloc] init];
});
return sharedApplication;
}
因此,他们推荐在Swift中编写单例的不同方法可能是正确的,但您正在寻找的是与Swift桥接的Objective-C单例。
答案 1 :(得分:0)
Apple的官方示例将Swift中的Singleton设置描述为:
class Singleton {
static let sharedInstance = Singleton()
}
或
class Singleton {
static let sharedInstance: Singleton = {
let instance = Singleton()
// setup code
return instance
}()
}
您可以在"Adopting Cocoa Design Patterns" in their Swift documentation的“Singleton”部分找到。
答案 2 :(得分:0)
这个怎么样?
class Singleton {
class func sharedInstance() -> Singleton {
struct Static {
static var instance: Singleton? = nil
static var onceToken: dispatch_once_t = 0
}
dispatch_once(&Static.onceToken) {
Static.instance = self()
}
return Static.instance!
}
@required init() {
}
}