在C ++中,我可以这样做:
class foo {
template <class bar>
bar baz() {
return bar()
}
}
但是当我在Swift中尝试这个时:
class Foo {
func baz<Bar>() -> Bar {
return Bar()
}
}
我遇到语法错误,Swift不支持显式泛型方法专门化。
Swift中有没有类似的实现?
答案 0 :(得分:3)
我不知道C ++中的代码到底是什么。但您可以使用Type Constraints。
但是对我来说仍然没有意义,因为并非每个类都有构造函数,在Swift中没有参数。所以我提出了这个代码,但我不确定这是否有帮助:
protocol TypeWithEmptyConstructor {
init()
}
class SomeClass {
required init() {
}
}
extension SomeClass: TypeWithEmptyConstructor { }
class Foo {
func baz<Bar: TypeWithEmptyConstructor>() -> Bar {
return Bar()
}
}
答案 1 :(得分:0)
我知道这是一个老帖子,但我遇到了同样的问题。我找到的解决方案是创建一个虚拟类,其实例传递给我的函数(类似于C ++重载)。
console.log(this["myVar" + (i+1) + "a");
console.log(this["myVar" + (i+1) + "b");
并将该函数调用为
// the dummy class
class Type2Type<T> {
typealias type = T
}
// the generic function
func myFunction<T>(Type2Type<T>) {
//do stuff here
}
希望它有所帮助。
答案 2 :(得分:-1)
我从来都不是Swift专家,但如果你不能在编译时专攻,那么你必须专注于运行时。 Swift确实有一些反射功能,所以尝试类似:
class Foo {
func baz<T>() -> T {
if(T.Type == Bar) {
doOneThing()
} else {
doTheOtherThing()
}
}
}
该代码未经测试,可能无效。祝你好运。