作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在 Swift 中实现一个类 Foo
,它应该实例化 SuperBar
的给定 子类 的对象,例如栏:SuperBar
。我真的很喜欢 Swift 中的泛型,所以我尝试以这种方式实现它:
class Foo<T: SuperBar> {
func instantiateObject() -> T {
return T()
}
}
class SuperBar {
}
class Bar: SuperBar {
}
let foo = Foo<Bar>()
let obj = foo.instantiateObject()
您可以在 Xcode Playground 中运行代码片段并观察 obj
是 SuperBar
类型而不是 Bar
类型,尽管它说 Bar
当我 Alt-单击常量名称时。
有什么想法吗? :)
最佳答案
将类 init 标记为 required
然后调用 init :
class SuperBar {
required init() {
}
}
class Foo<T: SuperBar> {
func instantiateObject() -> T {
return T.init()
}
}
关于generics - 在 Swift 中实例化泛型类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25346831/
我是一名优秀的程序员,十分优秀!