在Swift中获取泛型类型的名称(字符串)

我有一个类型T的泛型类,我想获得实例化时传递给该类的类型的名称。这是一个例子。

class MyClass<T> {

func genericName() -> String {

// Return the name of T.

}

}

我已经逛了好几个小时,但似乎找不到任何方法。有人尝试过吗?

任何帮助是极大的赞赏。

谢谢

回答:

单纯的快速方法是不可能的。

可能的解决方法是:

class MyClass<T: AnyObject> {

func genericName() -> String {

let fullName: String = NSStringFromClass(T.self)

let range = fullName.rangeOfString(".", options: .BackwardsSearch)

if let range = range {

return fullName.substringFromIndex(range.endIndex)

} else {

return fullName

}

}

}

这些限制取决于它仅适用于类的事实。

如果这是通用类型:

class TestClass {}

NSStringFromClass() 返回全名(包括名称空间):

// Prints something like "__lldb_expr_186.TestClass" in playground

NSStringFromClass(TestClass.self)

这就是为什么func搜索.字符的最后一次出现。

测试如下:

var x = MyClass<TestClass>()

x.genericName() // Prints "TestClass"

func genericName() -> String {

let fullName: String = NSStringFromClass(T.self)

let range = fullName.range(of: ".")

if let range = range {

return fullName.substring(from: range.upperBound)

}

return fullName

}

以上是 在Swift中获取泛型类型的名称(字符串) 的全部内容, 来源链接: utcz.com/qa/426083.html

回到顶部