Ios 如何将Swift类型名称作为字符串及其命名空间(或框架名称)获取

Ios 如何将Swift类型名称作为字符串及其命名空间(或框架名称)获取,ios,swift,Ios,Swift,有没有办法将Swift类型名称作为字符串及其命名空间(或框架名称)获取 例如,如果Foo.framework有一个名为Bar的类,我想得到一个类似“Foo.Bar”的字符串 下面只返回类名“Bar” 我还希望将框架名称“Foo”作为名称空间。使用: struct Bar{} 让barName=String(反射:Bar.self) 打印(barName)/.Bar 从: 类型名称和枚举案例现在打印并转换为字符串,而无需 默认情况下的资格调试打印或字符串(反射:)仍然可以 用于获取完全限定名 S

有没有办法将Swift类型名称作为字符串及其命名空间(或框架名称)获取

例如,如果
Foo.framework
有一个名为
Bar
的类,我想得到一个类似
“Foo.Bar”
的字符串

下面只返回类名
“Bar”

我还希望将框架名称
“Foo”
作为名称空间。

使用:

struct Bar{}
让barName=String(反射:Bar.self)
打印(barName)/.Bar
从:

类型名称和枚举案例现在打印并转换为字符串,而无需 默认情况下的资格<代码>调试打印或
字符串(反射:)
仍然可以 用于获取完全限定名

String(反射:)
现在可以工作,但将来可能会改变。因此,如果您暂时只需要完全限定的名称,就可以了。但是,如果名称是您将在较长时间内(跨越多个Swift版本)依赖的名称,则不应使用它

Swift社区正试图就从一种类型获取信息的长期方法达成共识

乔·格罗夫:

在4.2中,字符串(reflecting:)仍然显示本地类型的完全限定名称,但是本地类型上下文被匿名化,并且以一种明确的方式打印出来,这是不稳定的,因为无论我们将来添加什么反射支持,顺便说一句,在动态代码中依赖本地类型的存在或标识是个坏主意


谢谢您的回答,同时也请参考发行说明。我记得以前打印的类型名带有模块名,但我不确定我的内存是否正确。感谢您告诉我字符串初始值设定项更改了其默认行为。
let barName1 = String(Bar.self)       // returns "Bar"
let barName2 = "\(Bar.self)"          // returns "Bar"
let barName3 = "\(Bar().dynamicType)" // returns "Bar"
struct Bar { }

let barName = String(reflecting: Bar.self) 
print(barName) // <Module>.Bar