在
Swift中获得一个类的名称很容易:
import Foundation class Gen<T> { init() { } } func printName(obj: AnyObject) { dump(NSStringFromClass(obj.dynamicType)) } let a: Gen<String> = Gen() let b: Gen<Int> = Gen() printName(a) printName(b)
但是,如果您运行上述代码两次,则不会产生相同的结果.
那么有没有办法以稳定的方式实现printName(获取专门的泛型类的名字)?那么代码的多次运行会为同一个类打印相同的字符串?
我使用最新的Xcode测试版.
一些额外要求:
>将传递给printName的类的数量很高.
>可能有多个通用类,但不是很多.
从Xcode 6.3 beta 1开始的新功能
好消息!从6.3开始你可以做:
toString(Gen<Int>())
那会打印:Gen< Swift.Int>
老答案:
如果范围可以减少到T:AnyObject,那么你可以实现它如下:
class Gen<T: AnyObject> { var className: String { return "Gen<\(NSStringFromClass(T.self))>" } }