我怎样才能调用这个通用函数?
How can I call this generic function?
我只是想弄清楚 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
试试这个:
f<T: Prot>(t: T.Type) {
t.instance().doSomething()
}
f(Classy.self)
我现在不在可以测试它的地方,但我过去使用过这种技术并且它有效。
@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"
我只是想弄清楚 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
试试这个:
f<T: Prot>(t: T.Type) {
t.instance().doSomething()
}
f(Classy.self)
我现在不在可以测试它的地方,但我过去使用过这种技术并且它有效。
@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"