在Swift中结合泛型和扩展?

在Swift中结合泛型和扩展?,swift,Swift,看看: 我看到了一个非常通用的模式,用于创建类的共享单例实例。我希望能够为“所有类”创建一个扩展,该扩展使用泛型实现这个sharedInstance方法 我看不出有任何语法可以这样做;有人想试一试吗?我认为这是不可能的 即使可以扩展Any/AnyObject,每个对象都将共享sharedInstance单例getter的相同实现,因此也是相同的静态实例变量。因此,instance将被设置为调用sharedInstance的第一个类的实例 extension Any { class va

看看:

我看到了一个非常通用的模式,用于创建类的共享单例实例。我希望能够为“所有类”创建一个扩展,该扩展使用泛型实现这个sharedInstance方法


我看不出有任何语法可以这样做;有人想试一试吗?

我认为这是不可能的

即使可以扩展
Any
/
AnyObject
,每个对象都将共享
sharedInstance
单例getter的相同实现,因此也是相同的静态
实例
变量。因此,
instance
将被设置为调用
sharedInstance
的第一个类的实例

extension Any {
    class var sharedInstance:TPScopeManager {
        get {
            struct Static {
                static var instance : TPScopeManager? = nil
            }

            if !Static.instance {
                Static.instance = TPScopeManager()
            }

            return Static.instance!
        }
    }
}

...

NSString.sharedInstance() // Returns an NSString
NSArray.sharedInstance() // Returns the same NSString object!

正如其他人所指出的,Swift提供了一种更简单的方法来创建单身

举个例子:假设我们有一个名为
Model
的类,我们希望有一个在整个应用程序中可见的实例。我们需要在全局范围内编写的内容是:

这将创建一个
模型
类的实例,在任何地方都可见,并且不能被另一个实例替换(嗯,这正是人们对单例的期望,不是吗?)

另一方面,这种方法仍然允许您创建除单例之外的其他
Model
实例。虽然这与其他语言中对单例的官方定义不同,但这种方法有一个有趣的优点,即允许为测试目的创建其他实例(单例在单元测试世界中有坏消息:)


Swift很快将提供创建真正的
单例类所需的一切(现在很难,因为还不允许使用类变量)。尽管如此,上述方法对于许多Swift程序员来说可能已经足够了。

在Swift中,您可以对NSObject进行扩展,但不能扩展任何/AnyObject

let modelSingleton = Model()