基于类的通用返回类型

Dan*_*ark 1 generics factory swift

我正在尝试在一个类上创建工厂方法,该类会自动转换为它所在的类。

extension NSObject {
    // how can I get the return type to be the current NSObject subclass
    // instead of NSObject?
    class func create() -> NSObject {
        return self.init()
    }

    // example: create(type: NSArray.self)
    class func create<T:NSObject>(type:T.Type) -> T {
        return T()
    }
}
Run Code Online (Sandbox Code Playgroud)

示例二有效,但作为类方法没有任何优势:

let result = NSArray.create(type: NSArray.self) 
Run Code Online (Sandbox Code Playgroud)

但我希望能够打电话:

let result = NSArray.create() 
Run Code Online (Sandbox Code Playgroud)

而不必事后施法。有没有办法在 Swift 中做到这一点?

Noa*_*oah 6

您可以Self为此使用类级别:

extension NSObject {
    class func create() -> Self {
        return self.init()
    }
}

let array = NSArray.create()
Run Code Online (Sandbox Code Playgroud)

但我真的不明白你为什么会这样做,因为你不妨添加一个初始化程序。