我只是想找出swift泛型。我想在下面的测试代码中调用f()
。在这种情况下,我不知道如何告诉编译器T
是Classy
。
protocol Prot {
func doSomething()
static func instance() -> Prot
}
class Classy: Prot {
func doSomething() {
print("here")
}
static func instance() -> Prot {
return Classy()
}
}
func f<T: Prot>() {
T.instance().doSomething()
}
f() // error
f<Classy>() // error
最佳答案
@Roman Sausarnes的答案是正确的,但是您可以使用一个初始化器,而不是使用方法instance
。
protocol Prot {
func doSomething()
init()
}
class Classy: Prot {
func doSomething() {
println("Did something")
}
// The required keyword ensures every subclass also implements init()
required init() {}
}
func f<T: Prot>(Type: T.Type) {
Type().doSomething()
}
f(Classy.self) // Prints: "Did something"