Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获得;路径“;Swift中作为字符串的嵌套类型的 问题_Swift_String_Types_Nested_Nested Types - Fatal编程技术网

获得;路径“;Swift中作为字符串的嵌套类型的 问题

获得;路径“;Swift中作为字符串的嵌套类型的 问题,swift,string,types,nested,nested-types,Swift,String,Types,Nested,Nested Types,我正在寻找一种通用方法来获取Swift中嵌套类型的全名,即当我定义嵌套结构时,如下所示: struct A { struct B { struct C { } } } 我创建了一个C的实例,然后我想要一个返回该实例类型的完整路径的方法: let c = A.B.C() fullTypeName(c) // should return "A.B.C" 我的方法 当我使用 String(describing: type(of: c)) 它只返回

我正在寻找一种通用方法来获取Swift中嵌套类型的全名,即当我定义嵌套结构时,如下所示:

struct A {
    struct B {
        struct C {
        }
    }
}
我创建了一个
C
的实例,然后我想要一个返回该实例类型的完整路径的方法:

let c = A.B.C()
fullTypeName(c) // should return "A.B.C"

我的方法 当我使用

String(describing: type(of: c))
它只返回最后一个组件
C
,即相对于定义它的范围的类型名称

当我使用

String(reflecting: type(of: c))
它实际上返回整个路径,但带有一些难看的前缀
\uuuuulldb\uexpr\u22.A.B.C

我根据以下内容创建了一个简单的自定义
字符串
初始值设定项:

extension String {

    init<Subject>(describingNestedType: Subject) {
        let string = String(reflecting: Subject.self)
        let components = string.split(separator: ".")
        let path = components.dropFirst().joined(separator: ".")
        self = path
    }

}
但是使用方法
String(反射:)
让我有点担心,因为

  • 没有人能保证它在某些情况下不返回其他前缀,或者根本不返回前缀
  • 函数的描述表明它仅用于调试目的


那么,有没有一种方法可以安全地获取嵌套类型的(完整)名称呢?class_getSuperclass应该根据以下内容提供帮助:“String(reflecting:)仍然可以用于获取完全限定的名称。”–除非我弄错了,否则第一个组件始终是模块名称。
\u lldb\u expr\u 22
是模块名称。我猜你是在操场上玩的?没错。谢谢你的意见!
let c = A.B.C()
let cString = String(describingNestedType: c)
print(cString) // prints "A.B.C"