我注意到在Objective-c运行时重命名了Swift类。所以如果我在swift中有一个名为ViewController
的类,当我执行TestRuntime
时,我的应用名称为object_getClass(self)
, self 为ViewController
,我会得到这个:_TtC11TestRuntime14ViewController
。我注意到这种模式或格式:_TtC$$AppName$$ClassName
, $ 是一个随机数。我无法弄清楚这些数字的来源。如果有人能够了解swift如何快速命名它在运行时的类,那将真正帮助我。
答案 0 :(得分:8)
他们不是随意的。它们是以下值的长度。这类似于常见的C ++名称修改,并支持可能在其中包含相当任意字符的标识符,而不需要一些新的分隔符。它还可以使它们更易于解析,尤其是在C中。
在这种特殊情况下,它是_TtC
然后是“十一个字符模块名称”,然后是模块名称,然后是“十四个字符类名”和类名。我假设C
是班级。不确定Tt
(可能是“类型”)。
答案 1 :(得分:1)
描述将在以下3个部分中构建
这里的功能是一个特例。该描述还将提供有关函数签名的一些信息。
例如,您可以拥有_TtCFCC5MyApp7MyClass10MySubClass6myFuncFS0_FT_T_L_11MySubSubClass
这将是以下代码中MySubSubClass的描述:
class MyClass {
class MySubClass {
func myFunc() {
class MySubSubClass {
}
}
}
}
在这里,您可以找到一些sample code,它将该描述解析为易于使用的属性和数组。
更新:Demangle现在转换为swift。您可以在此处找到它:https://github.com/mattgallagher/CwlDemangle/blob/master/CwlDemangle/CwlDemangle.swift