Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.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
Ios Swift Objective-C运行时类命名_Ios_Objective C_Class_Runtime_Swift - Fatal编程技术网

Ios Swift Objective-C运行时类命名

Ios Swift Objective-C运行时类命名,ios,objective-c,class,runtime,swift,Ios,Objective C,Class,Runtime,Swift,我注意到在objective-c运行时重命名了Swift类。因此,如果我在swift中有一个名为ViewController的类,当我执行object\u getClass(self)、self-beingViewController时,我的应用程序的名称是testruntime14viewcontroller。我注意到这种模式或格式:\u TtC$$AppName$$ClassName,$是一个随机数。我不知道这些数字是从哪里来的。如果有人能告诉我swift在运行时如何命名它的类,这对我真的很

我注意到在objective-c运行时重命名了Swift类。因此,如果我在swift中有一个名为
ViewController
的类,当我执行
object\u getClass(self)
、self-being
ViewController
时,我的应用程序的名称是
testruntime14viewcontroller
。我注意到这种模式或格式:
\u TtC$$AppName$$ClassName
$是一个随机数。我不知道这些数字是从哪里来的。如果有人能告诉我swift在运行时如何命名它的类,这对我真的很有帮助。

它们不是随机的。它们是以下值的长度。这与普通C++名称的相似,并支持标识符,这些标识符可以在它们中具有相当的任意字符,而不需要一些新的分隔符。它还可以使它们更容易解析,特别是在C语言中


在这种特殊情况下,它是
\u TtC
然后是“一个十一字符的模块名”,然后是模块名,然后是“一个十四字符的类名”和类名。我假设
C
是类。不确定Tt(可能是“类型”)。

以下三节将对其进行说明

  • 描述以_Tt开头,表示目标(bundle/app name)
  • 在此之后,您将有一个或多个字母,如C P F,代表类、协议或函数。根据嵌套顺序,它们的顺序相反
  • 然后,您将得到一系列数字加上一个名称,其中数字是名称的长度。每一个都是针对描述开头指定的目标、类、协议或函数
  • 函数在这里是一个特例。该说明还将包含有关函数签名的一些信息

    例如,您可以有一个_ttcfcc5myapp7mycyclass10mysubclass6myfuncfs0\u FT\u T\u L\u 11mysubclass

    这将是以下代码中MySubSubClass的描述:

    class MyClass {
       class MySubClass {
         func myFunc() {
           class MySubSubClass {
           }
         }
       }
    }
    
    在这里,您可以找到一些将该描述解析为易于使用的属性和数组的方法


    更新:Demangle现在已转换为swift。您可以在这里找到它:

    我想它可能是“类型到类”谢谢,并且到Demanling代码的链接是一个很好的奖励。这个答案值得更多的投票!