【发布时间】:2015-08-12 19:53:04
【问题描述】:
只是一个简单的问题。我有以下代码,效果很好:
class obA: Printable {
var description: String { get { return "obA" } }
}
class obB: Printable {
var description: String { get { return "obB" } }
}
func giveObject() -> obA { return obA() }
func giveObject() -> obB { return obB() }
var a: obA = giveObject()
var b: obB = giveObject()
println(a)
println(b)
giveObject 的正确变体被调用,一切正常。当然这只是一个简化的例子,实际上在我的项目中有几十个“giveObject”的重载,所有的返回类型都不同。现在,我想做一个通用函数来解析所有这些东西。那么,下一步:
func giveGeneric<T>() -> T {
return giveObject()
}
var c: obA = giveGeneric()
println(c)
这抱怨了 giveObject 的使用不明确。我可以理解错误来自哪里,但我不知道如何解决它并使用这样的构造......
【问题讨论】:
-
这是一个有趣的问题,在 StackOverflow 上有很多关于从其(字符串)名称实例化类的答案,但我看不到您的需要,在这里,没有更多细节 - 在你说
var x: ObX = giveObject()你也可以说var x = ObX()... -
当然这是一个简化的例子。 giveGeneric 函数应该做一些在 giveObject 中不能做的处理,但是对于很多不同的类型都是一样的,只是类型不同。我正在尝试减少项目中的大量重复代码。