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 中做到这一点?
您可以Self为此使用类级别:
extension NSObject {
class func create() -> Self {
return self.init()
}
}
let array = NSArray.create()
Run Code Online (Sandbox Code Playgroud)
但我真的不明白你为什么会这样做,因为你不妨添加一个初始化程序。