簡體   English   中英

Swift Objective-C運行時類命名

[英]Swift Objective-C runtime class naming

我注意到在Objective-c運行時重命名了Swift類。 所以,如果我在swift中有一個名為ViewController的類,當我執行object_getClass(self)時,我的應用程序的名稱是TestRuntime ,我自己就是ViewController ,我會得到: _TtC11TestRuntime14ViewController 我注意到了這種模式或格式: _TtC$$AppName$$ClassName$是一個隨機數。 我無法弄清楚這些數字的來源。 如果有人能夠了解swift如何快速命名它在運行時的類,那將真正幫助我。

它們不是隨機的。 它們是以下值的長度。 這類似於常見的C ++名稱修改,並支持可能在其中包含相當任意字符的標識符,而不需要一些新的分隔符。 它還可以使它們更容易解析,尤其是在C語言中。

在這種特殊情況下,它是_TtC然后是“十一個字符模塊名稱”然后是模塊名稱,然后是“十四個字符類名”和類名。 我假設C是上課。 不確定Tt (也許是“類型”)。

描述在以下3個部分中構建

  1. 描述以_Tt開頭,它代表目標(包/應用程序名稱)
  2. 之后,您將擁有一個或多個字母,如CPF,代表類,協議或功能。 根據嵌套,它們的順序相反
  3. 然后,您將獲得一系列數字以及一個名稱,其中數字是名稱的長度。 這些中的每一個都用於描述開頭所指定的目標,類,協議或功能。

功能是這里的特例。 描述還將包含有關函數簽名的一些信息。

例如,您可以擁有_TtCFCC5MyApp7MyClass10MySubClass6myFuncFS0_FT_T_L_11MySubSubClass

這將是以下代碼中MySubSubClass的描述:

class MyClass {
   class MySubClass {
     func myFunc() {
       class MySubSubClass {
       }
     }
   }
}

在這里,您可以找到一些示例代碼 ,將該描述解析為易於使用的屬性和數組。

更新:Demangle現在轉換為swift。 你可以在這里找到它: https//github.com/mattgallagher/CwlDemangle/blob/master/CwlDemangle/CwlDemangle.swift

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM